传统的javaEE增加Filter是在web.xml中配置
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.demo.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</filter-mapping>
Spring boot 没有 web.xml配置文件 如何配置
1、通过 @WebFilter 注解来配置
@Component
@WebFilter(urlPatterns = "/*", filterName = "authFilter")
public class AuthFilter implements Filter {
......
}
//@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。
//不设置WebFilter的时候 默认过滤 所有 /*
2、通过 @Bean 注解来配置
这个写在 @SpringBootApplication 注解的类里面的。
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("testFilter");
return registration;
}
注意事项: 如果类上添加 @Component
ShopWebApplication 通过FilterRegistrationBean 设置的Filter代码注释掉还是会执行过滤。 默认 所有路径 【方式一 参考】
那如果有多个过虑器,怎么指定执行的顺序呢?
通过 registration.setOrder(1); 来设置,例如:
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("testFilter");
registration.setOrder(1);
return registration;
}
@Bean
public FilterRegistrationBean authFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new AuthFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("authFilter");
registration.setOrder(2);
return registration;
}
关于 @Order 注解
有文章提到使用 @Order 注解来指定顺序,亲测无效。