2017-06-18 71 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,但由於您擁有一個字符串中的所有內容,因此無法正常工作。所以你可以用@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; 
}