2017-06-18 11 views
1

私は5つのカスタムフィルタを持っています。私はspringのFilterRegistrationBeanを使ってそれらを登録しました。設定に基づいてカスタムフィルタを無効にする

@Bean 
    public FilterRegistrationBean myFilter() { 

     FilterRegistrationBean registration = new FilterRegistrationBean(); 
     Filter myFilter = new CustomPermissionfilter(); 
     beanFactory.autowireBean(myFilter); 
     registration.setFilter(myFilter); 
     registration.setOrder(2); 
     return registration; 
    } 

このように私はすべてのフィルタを登録しました。

私の要件は、以前に登録したフィルタのいくつかを無効にする必要があります。

設定ファイル

custom.filters=CustomPermissionfilter,permissionFilter,IPvalidationFilter 

何を必要とすることは、私は

上で指定した以外の他のすべてのカスタムフィルタを無効にする必要がある私は(BeanFactoryPostProcessor filterDisablingPostProcessorを試してみました) が、これだけの負荷デフォルトのフィルタは、コンテキストにregisterdので、このアプローチに失敗しました。 助けてください

答えて

3

最も簡単な解決策は、フィルタBeanの定義をConditionalにすることです。最も論理的なConditional*@ConditionalOnPropertyですが、すべての文字列が1つの文字列になっているため動作しません。だから代わりに@ConditionalOnExpressionを使うことができます。

@Bean 
@ConditionalOnExpression("#{environment.getProperty('custom.filters').contains('CustomPermissionfilter')}") 
public FilterRegistrationBean myFilter() { 
    FilterRegistrationBean registration = new FilterRegistrationBean(); 
    Filter     myFilter  = new CustomPermissionfilter(); 
    beanFactory.autowireBean(myFilter); 
    registration.setFilter(myFilter); 
    registration.setOrder(2); 
    return registration; 
} 
関連する問題