java FilterRegistrationBean是使用Spring安全性启用CORS支持所必需的吗?
我的资源服务器由OAuth2保护,并使用以下CORS配置:
@Bean
CorsConfigurationSource corsConfigurationSource()
{
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowCredentials(true);
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("*"));
configuration.setAllowedHeaders(Arrays.asList("*"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
@Bean
FilterRegistrationBean<CorsFilter> corsFilter(CorsConfigurationSource corsConfigurationSource)
{
CorsFilter corsFilter = new CorsFilter(corsConfigurationSource);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(corsFilter);
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
该配置按预期处理飞行前请求,但我想知道为什么有必要创建自定义FilterRegistrationBean并设置其顺序,而不是使用HttpSecurity.cors()文档化here的官方CORS支持:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.cors();
}
@Bean
CorsConfigurationSource corsConfigurationSource()
{
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowCredentials(true);
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("*"));
configuration.setAllowedHeaders(Arrays.asList("*"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
上面的配置不能正确处理飞行前的请求,我猜CORS过滤器的性能低于spring安全过滤器
使用第一个FilterRegistrationBean版本是否有缺点,或者为什么官方的cors配置不能正常工作?我在配置官方方式时出错了吗
我将Spring Boot 2与spring-security-oauth2-autoconfigure
一起使用,但在Spring Boot 1.5中得到了相同的行为。x
# 1 楼答案
您的} :
WebSecurityConfig
类从未用于任何请求,因为默认顺序为100,请参见^{资源服务器配置的默认顺序是3,请参见^{} :
如果要使用
WebSecurityConfig
类,必须将顺序更改为小于3的值。但要小心,因为可能会隐藏资源服务器配置如果你的应用程序也是一个授权服务器,你也必须小心。无法使用带有^{} 注释的授权服务器配置。授权服务器安全配置的默认顺序为0,请参见^{}
如果您只想将CORS支持添加到资源服务器配置中,那么重写^{} 就更容易了