乐趣区

[心得]SpringBoot使用addCorsMappings配置跨域的坑

什么是跨域问题这里我就不说了,直接说我使用 addCorsMappings 方法配置跨域时遇到的问题。具体代码如下:
public void addCorsMappings(CorsRegistry registry) {

registry.addMapping(“/**”)
.allowedOrigins(“*”)
.allowedMethods(“POST”, “GET”, “PUT”, “OPTIONS”, “DELETE”)
.allowCredentials(true)
.allowedHeaders(“*”)
.maxAge(3600);
}
但是使用此方法配置之后再使用自定义拦截器时跨域相关配置就会失效。原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入 Mapping 映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。
正确的解决跨域问题的方法时使用 CorsFilter 过滤器。代码如下:
private CorsConfiguration corsConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
* 请求常用的三种配置,* 代表允许所有,当时你也可以自定义属性(比如 header 只能带什么,只能是 post 方式等等)
*/
corsConfiguration.addAllowedOrigin(“*”);
corsConfiguration.addAllowedHeader(“*”);
corsConfiguration.addAllowedMethod(“*”);
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setMaxAge(3600L);
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(“/**”, corsConfig());
return new CorsFilter(source);
}
参考资料:
1、【SpringMVC】与权限拦截器冲突导致的 Cors 跨域设置失效问题 2、springboot web 跨域访问问题解决 –addCorsMappings 和 CorsFilter

退出移动版