SpringBoot在使用SpringSecurity时,配置跨域过滤器CorsFilter不生效分析解决
报错问题解释:
在Spring Boot项目中使用Spring Security时,配置跨域过滤器CorsFilter
可能不生效,这通常是因为Spring Security的过滤器链在CorsFilter之后,导致CorsFilter的逻辑没有得到执行。
解决方法:
- 自定义CorsFilter并注册为Bean。
- 继承WebSecurityConfigurerAdapter,重写
addCorsMappings
方法。 - 自定义Security过滤器,将其放在Spring Security过滤器链之前。
示例代码:
自定义CorsFilter并注册为Bean:
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
继承WebSecurityConfigurerAdapter,重写addCorsMappings
方法:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 其他配置...
.cors();
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true);
}
}
自定义Security过滤器,将其放在Spring Security过滤器链之前:
@Configuration
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(corsFilter(), CsrfFilter.class)
// 其他配置...
;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
// 配置跨域
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
评论已关闭