SpringBoot 过滤器配置有三种方式
1. @ServletComponentScan + @WebFilter, 可配置过滤路径, 但没有顺序(顺序是由过滤器命名决定)
在启动类上使用 @ServletComponentScan, 在过滤器类上使用 @WebFilter(urlPatterns = {"/test/path"})
1@SpringBootApplication 2@ServletComponentScan 3public class ServicemapServicecenterBackendApplication { 4 5 public static void main(String[] args) { 6 SpringApplication.run(ServicemapServicecenterBackendApplication.class, args); 7 } 8} 9 10@WebFilter(urlPatterns = {"/test"}) 11public class FilterTwo extends OncePerRequestFilter { 12 13 @Override 14 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 15 System.out.println("************************** FilterTwo **************************"); 16 filterChain.doFilter(request, response); 17 } 18 19}
2. @Component + @Order(100), 不可配置过滤路径, 可以通过@Order配置顺序
在过滤器类上使用 @Component , @Order(100) 数值越小优先级越高
1@Component 2@Order(100) 3public class FilterOne extends OncePerRequestFilter { 4 5 @Override 6 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 7 System.out.println("************************** FilterOne **************************"); 8 filterChain.doFilter(request, response); 9 } 10}
3. @SpringBootConfiguration + @Order, 可配置过滤路径, 可以通过@Order配置顺序, 也可以在代码中setOrder(100)配置 (推荐方式)
1@Order(100) 2public class FilterOne extends OncePerRequestFilter { 3 4 @Override 5 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 6 System.out.println("************************** FilterOne **************************"); 7 filterChain.doFilter(request, response); 8 } 9} 10 11@SpringBootConfiguration 12public class FilterConfig { 13 14 @Bean 15 public FilterRegistrationBean<FilterOne> filterOneRegister() { 16 FilterRegistrationBean<FilterOne> filterRegistrationBean = new FilterRegistrationBean<>(); 17 filterRegistrationBean.setFilter(new FilterOne()); 18 filterRegistrationBean.addUrlPatterns("/*"); 19// filterRegistrationBean.setOrder(100); 20 return filterRegistrationBean; 21 } 22}