簡體   English   中英

使用Spring Security啟用CORS支持所需的FilterRegistrationBean?

[英]FilterRegistrationBean necessary to enable CORS support with Spring Security?

我的資源服務器受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支持:

@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-security-oauth2-autoconfigure Spring Boot 2,但是在Spring Boot 1.5.x中得到了相同的行為。

您的WebSecurityConfig類永遠不會用於任何請求,因為默認順序為100,請參閱WebSecurityConfigurerAdapter

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

並且資源服務器配置的默認順序為3,請參閱EnableResourceServer

批注將創建一個WebSecurityConfigurerAdapter ,其硬編碼Order (3)。

如果要使用WebSecurityConfig類,則必須將順序更改為小於3的值。但是請注意,因為您可能會隱藏資源服務器配置。

如果您的應用程序也是授權服務器,則也必須小心。 不能使用帶有EnableAuthorizationServer注釋的授權服務器配置。 授權服務器的安全性配置的默認順序為0,請參閱AuthorizationServerSecurityConfiguration

如果只想在資源服務器配置中添加CORS支持,則覆蓋ResourceServerConfigurerAdapter#configure(HttpSecurity http)會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM