2014-11-04 90 views
2

我試圖調整我的應用程序配置以設置ETag支持。在Spring Boot MVC中添加ShallowEtagHeaderFilter

我剛纔檢查this SO問題,所以讓我說在我的代碼是從它不同:

  1. 我不使用任何XML配置文件任何責任。
  2. 我對系統的每個方面使用不同的配置類。我WebConfig看起來是這樣的:
 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = { "xxx", "yyy" }) 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public Filter shallowETagHeaderFilter() { 
     return new ShallowEtagHeaderFilter(); 
    } 
     ... 
} 
 
  • 我的SecurityConfig如下:
  •  
    
        @Configuration 
        @EnableWebSecurity 
        public class SecurityConfig extends WebSecurityConfigurerAdapter { 
         ... 
    
         @Override 
         protected void configure(final HttpSecurity http) throws Exception { 
          http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
           .and().exceptionHandling() 
             .authenticationEntryPoint(authenticationEntryPoint()) 
           .and().authorizeRequests() 
             .antMatchers(HttpMethod.GET, "/**").authenticated() 
             .antMatchers(HttpMethod.POST, "/**").authenticated() 
             .antMatchers(HttpMethod.HEAD, "/**").authenticated() 
          .and().csrf().disable()  
          .addFilterBefore(authenticationTokenProcessingFilter(), UsernamePasswordAuthenticationFilter.class); 
         } 
    
        } 
     
    
  • 我也有一個初始化類,它是空的:
  •  
    
        @Order(value=1) 
        public class SecurityWebAppInitializer extends AbstractSecurityWebApplicationInitializer { 
    
        } 
     
    

    我沒有看到任何地方ShallowEtagHeaderFilter被添加到默認鏈或任何東西,我怎麼能在這個設置中使用它?

    +0

    而你的問題是/? Spring Boot應該自動添加過濾器。您的初始化程序不被使用,因此不會執行也不會添加任何內容。 Spring Boot已經被Spring Boot啓用,所以你不需要'@ EnableWebSecurity'。 – 2014-11-04 21:45:17

    +0

    嗯,在這種情況下它不會自動設置它。我如何修改我的初始化程序以啓動ShallowEtagHeaderFilter? – resilva87 2014-11-04 21:47:51

    +0

    你不能像初始化器在Spring Boot應用程序中沒有做任何事情。 – 2014-11-04 21:48:54

    回答

    6

    好吧,

    根據this後:

    [...]爲解決這個春季安全增加了高速緩存控制的支持,這將插入下面的標題爲您的響應。

    緩存控制:無緩存,無店鋪,最大年齡= 0,必重新驗證

    雜注:無緩存

    過期:0

    那麼,是什麼發生的事情是ETag支持被添加了,但Spring Security在響應中使其失效。看來如果你想同時使用Spring Security和ETag支持,你需要聲明以下代碼行(用箭頭突出顯示):

    @Configuration 
    @EnableWebSecurity 
    public class SecurityConfig extends WebSecurityConfigurerAdapter { 
        ... 
    
        @Override 
        protected void configure(final HttpSecurity http) throws Exception { 
         http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
          .and().exceptionHandling() 
            .authenticationEntryPoint(authenticationEntryPoint()) 
          .and().authorizeRequests() 
            .antMatchers(HttpMethod.GET, "/**").authenticated() 
            .antMatchers(HttpMethod.POST, "/**").authenticated() 
            .antMatchers(HttpMethod.HEAD, "/**").authenticated() 
         .and().csrf().disable()  
         .addFilterBefore(authenticationTokenProcessingFilter(), UsernamePasswordAuthenticationFilter.class); 
         ===> http.headers().cacheControl().disable(); 
        } 
    
    } 
    
    相關問題