SpringSecurity与默认CorsFilter冲突问题(一般情况)


Cors简单介绍

Cors是一个W3C标准,全称“跨域资源共享(Cross-origin resource sharing)”.它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了Ajax只能同源使用的限制。

Response响应头

响应头字段名称 作用
Access-Control-Allow-Origin 允许访问的客户端域名
Access-Control-Allow-Credentials 是否允许请求带有验证信息,若要获取客户端域下的cookie时,需要将其设置为true。
Access-Control-Allow-Headers 允许服务端访问的客户端请求头
Access-Control-Allow-Methods 允许访问的HTTP请求方法
Access-Control-Max-Age 用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。

SpringBoot配置Cors

继承WebMvcConfigurer,自定义Filter注册

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

注意

1.配置SpringSecurity设置不拦截OPTIONS请求

http.authorizeRequests().antMatcher(HttpMethod.OPTIONS).permitAll();

2.配置CorsFilter的优先级要优先于SpringSecurity配置

bean.setOrder(0);

文章作者: Lanren
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lanren !
  目录