出现这个问题,主要的原因就是前端没有将cookie带给后端,或者后端的cookie没有带给前端。所以把这个解决了就基本解决了问题。
后端配置
在后端配置了一个过滤器,也是解决跨域的问题:
<!-- 跨域设置 -->
<filter>
<filter-name>crossFilter</filter-name>
<filter-class>com.wiki.fileter.CrossDomainFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>crossFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CrossDomainFilter类中代码:
public class CrossDomainFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
//设置跨域请求
HttpServletResponse response = (HttpServletResponse) res;
//此处ip地址为需要访问服务器的ip及端口号
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
response.setHeader("Access-Control-Max-Age", "3628800");
// System.out.println("设置跨域请求");
chain.doFilter(req, response);
}
@Override
public void destroy() {
}
}
前端配置
前端用的vue,加上withCredentials: true:
这样配置就解决获取sessionid不一致的问题了。
存在的问题
但是这样还是有个小的问题,那就是登录时用的post方式,然后前端其他地方用post方式获取地方就不行,必须前端和后端一起改为get方式才可以获取数据,我还没有找到问题所在,如果找到了会更新文章。
感谢观看!如果有什么问题或者交流的可以加我qq997355706。