SpringBoot前后端分离,每次跨域请求导致sessionId不一致,解决方法

2,078 阅读1分钟
  • 今天在项目对接时候,我在session中存储了实体类数据,在本地用PostMan测数据是可以通过,前端对接数据的时候获取不到数据,当时觉得很奇怪,查阅资料后修改如下:

解决方法

  • 在Java工程目录中添加CrossFilter类
  • 代码如下
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* 跨域问题过滤
* */
@Component
public class CORSFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, GET");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}
  • 如果还是不行,就要在前端中加入,如下代码
ajax需要设置:
       xhrFields: {
           withCredentials: true
       },
       crossDomain: true
  • 注意在Java工程目录中添加CrossFilter类

    Access-Control-Allow-Credentials 是true的时候。Access-Control-Allow-Origin"的值不能为*。 在ajax 请求是也要加相应的东西

总结,

  • 细心
  • 反思
  • 提升
  • 用智商写代码,用情商去工作!