这个问题 真的是太烧脑了🤯... 本人百度了100种方法 都没有得到有效的解决!!!
最后苍天不负有心人...
第一步:需要在前端添全局定义
axios.defaults.withCredentials=true
第二步: 添加 CorsConfig类
@Configuration @EnableWebMvc public class CorsConfig implements WebMvcConfigurer { public void addCorsMappings(CorsRegistry registry) { //设置允许跨域的路径 registry.addMapping("/**") //设置允许跨域请求的域名 // .allowedOrigins("*") .allowedOriginPatterns("*") //这里:是否允许证书 不再默认开启 .allowCredentials(true) //设置允许的方法 .allowedMethods("*") //跨域允许时间 .maxAge(3600); } }
注意 如果请求用域名 放开 .allowedOrigins("*"),注释掉 .allowedOriginPatterns("*")
如果是ip+端口请求 反之
第三步:先上图,代码在下面
1.Access-Control-Allow-Headers 不可使用*
2.Access-Control-Allow-Credentials 必须设置成 true
注意:response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Allow-Credentials", "true");// cookie跨域
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; /** * Created in com.web.filter Description : < 实现跨域的过滤器 > Time : 15:02. */ @Component public class AccessControlFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String originHeader = ((HttpServletRequest) servletRequest).getHeader("Origin"); HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader("Access-Control-Allow-Origin", originHeader); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "86400"); // x-requested-with,authorization,token,Content-Type,Accept,Content-Type,User-Agent response.setHeader("Access-Control-Allow-Headers", "x-requested-with,authorization,token,Content-Type,Accept,Content-Type,User-Agente"); // response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Allow-Credentials", "true");// cookie跨域 // System.out.println("处理跨域问题"); if (((HttpServletRequest) servletRequest).getMethod().equalsIgnoreCase("OPTIONS")) { response.setStatus(HttpServletResponse.SC_OK); return; } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
重启项目运行即可!!