最开始sprinboot解决跨域问题
使用的继承WebMvcConfiguer类,重写addCorsMappings方法,在CorsRegistry中设置跨域属性
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedHeaders("*")
.allowedOrigins("")
.allowedMethods("*")
.allowCredentials(true)
.maxAge(3600);
}
但是这样会存在问题:
- 添加拦截器会导致拦截下来的路径又出现了跨域问题,没有被拦截的路径则可以正常请求;
新的解决方法
上述拦截器问题的原因:该请求在进行跨域验证前就被拦截了。
所以应该提前进行跨域验证,因此增加一个跨域验证的过滤器,过滤器由servlet提供在发生在拦截器之前。
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
// 设置访问源地址
config.addAllowedOriginPattern("*");
// 设置访问源请求头
config.addAllowedHeader("*");
// 设置访问源请求方法
config.addAllowedMethod("*");
// 有效期 1800秒
config.setMaxAge(1800L);
// 添加映射路径,拦截一切请求
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
// 返回新的CorsFilter
return new CorsFilter(source);
}