How to define Servlet filter order of execution in Spring Boot application

前端 未结 3 1066
臣服心动
臣服心动 2020-12-07 20:46

I am trying to set the order of execution of 2 filters in my spring boot application which have same url mapping. I have tried using 2 filter registration beans in my main A

相关标签:
3条回答
  • 2020-12-07 21:10

    setOrder(int) method does the job.

    below is an example

    @Configuration
    @EnableAutoConfiguration
    @EnableWebMvc
    @ComponentScan
    public class Application {
    
        @Bean
        public FilterRegistrationBean filterRegistrationBean() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            SecurityFilter securityFilter = new SecurityFilter();
            registrationBean.setFilter(securityFilter);
            registrationBean.setOrder(2);
            return registrationBean;
        }
    
        @Bean
        public FilterRegistrationBean contextFilterRegistrationBean() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            RequestContextFilter contextFilter = new RequestContextFilter();
            registrationBean.setFilter(contextFilter);
            registrationBean.setOrder(1);
            return registrationBean;
        }
    }
    
    0 讨论(0)
  • 2020-12-07 21:17

    Spring Boot sorts your FilterRegistrationBean using AnnotationAwareOrderComparator before applying them to the servlet context. The RegistrationBean is not currently Ordered so there is no way to set the order by calling a method, but you can work around that by creating subclasses and adding @Order to them. I think making the base class Ordered and providing a setter is probably a useful thing to do in the framework (open an issue on github if you agree).

    Update: Ordered was added in 1.0.x.

    0 讨论(0)
  • 2020-12-07 21:18

    Bean name will solve your problem: @Bean("aFilter").

    0 讨论(0)
提交回复
热议问题