根据配置禁用自定义筛选器

时间:2017-06-18 10:33:53

标签: spring spring-boot filter

我有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() 但是这种方法失败了,因为这只在上下文中注册了加载默认过滤器。 请帮忙

1 个答案:

答案 0 :(得分: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;
}