gpt4 book ai didi

java - FilterRegistrationBean 需要使用 Spring Security 启用 CORS 支持吗?

转载 作者:行者123 更新时间:2023-11-30 02:13:25 27 4
gpt4 key购买 nike

我的资源服务器受 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() 的官方 CORS 支持记录here :

@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 Security 过滤器。

enter image description here

使用第一个 FilterRegistrationBean 版本有缺点吗?或者为什么官方的 cors 配置不能正常工作?难道是我按照官方的方式配置错误了?

我将 Spring Boot 2 与 spring-security-oauth2-autoconfigure 结合使用,但在 Spring Boot 1.5.x 中得到了相同的行为。

最佳答案

您的 WebSecurityConfig 类永远不会用于任何请求,因为默认顺序是 100,请参阅 WebSecurityConfigurerAdapter :

@Order(value=100)
public abstract class WebSecurityConfigurerAdapter
extends java.lang.Object
implements WebSecurityConfigurer<WebSecurity>

资源服务器配置默认顺序为3,参见EnableResourceServer :

The annotation creates a WebSecurityConfigurerAdapter with a hard-coded Order (of 3).

如果您想使用 WebSecurityConfig 类,您必须将顺序更改为小于 3 的值。但要小心,因为您可能会隐藏资源服务器配置。

如果您的应用程序也是授权服务器,您也必须小心。您的授权服务器配置带有 EnableAuthorizationServer 注释不能使用。授权服务器的安全配置默认顺序为0,参见AuthorizationServerSecurityConfiguration .

如果您只想将 CORS 支持添加到资源服务器配置中,则更容易覆盖 ResourceServerConfigurerAdapter#configure(HttpSecurity http) .

关于java - FilterRegistrationBean 需要使用 Spring Security 启用 CORS 支持吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com