SpringBoot项目,引入了两个Jar包,两个包中分别有一个Filter,请教各位同学,怎么在自己的项目中去变更这两个Filter的顺序啊?
两个Filter都是在jar包中通过@Configuration写配置类注册进去的,如下面代码所示
@Bean
public FilterRegistrationBean myFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns(new String[]{"/*"});
registration.setOrder(-10);
registration.setName("myFilter");
return registration;
}
用BeanFactoryPostProcessor接口就可以了
@Component
public class FilterBeanFactoryPostProcessor implements BeanFactoryPostProcessor{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition myFilterBeanDefinition = beanFactory.getBeanDefinition("myFilter");
myFilterBeanDefinition.getPropertyValues().add("order",-10000);
}
}
如果按照题主配置类的方式注册过滤器,指定过滤器的顺序是通过registration.setOrder实现.order中指定的数值越小,执行的优先级越高.
如有帮助,欢迎采纳!
能不能通过@ComponentScan排除这两个bean,或者声明这两个bean的配置类,然后手动自己配置一下
重写这两个过滤器,指定执行的顺序
@Configuration
@Order(2)
试过这种方式吗