一、跨域问题一
环境:Spring Boot 2.0.5
1.1、错误提示
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
1.2、配置
SpringBoot2.0.0
/**
* 跨域请求
*/
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//设置允许跨域的路径
registry.addMapping("/**")
//设置允许跨域请求的域名
.allowedOrigins("*")
//是否允许证书 不再默认开启
.allowCredentials(true)
//设置允许的方法
.allowedMethods("*")
//跨域允许时间
.maxAge(3600);
}
}
SpringBoot2.4.0
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//设置允许跨域的路径
registry.addMapping("/**")
//设置允许跨域请求的域名
.allowedOriginPatterns("*")
//是否允许证书 不再默认开启
.allowCredentials(true)
//设置允许的方法
.allowedMethods("*")
//跨域允许时间
.maxAge(3600);
}
}
二、跨域问题二
问题描述:axios 设置headers.Authorization都成功了,但是请求头还是没有。但用Postman访问正常。

1.png

2.png
解决:postman不存在跨域的问题,所以没问题,所以只要后台加上跨域和放开Authorization权限就OK了
if (request.getMethod().equals("OPTIONS"))
//跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。
// 另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),
// 浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),
// 从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。
// 在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
// 参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
response.setStatus(HttpServletResponse.SC_OK);
else
filterChain.doFilter(request, response);