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