参考:
https://blog.csdn.net/testcs_dn/article/details/80265196
spring boot 配置Filter过滤器
1、通过 @WebFilter 注解来配置
@Component
@WebFilter(urlPatterns = “/*”, filterName = “authFilter”)
public class AuthFilter implements Filter {
…
}
2、通过 @Bean 注解来配置
首先在springboot启动类上添加注解@ServletComponentScan
SpringBootApplication
上使用@ServletComponentScan
注解后
Servlet
可以直接通过@WebServlet
注解自动注册
Filter
可以直接通过@WebFilter
注解自动注册
Listener
可以直接通过@WebListener
注解自动注册
然后添加Filter配置类
@Configuration
public class FilterConfig {
@Autowired
private AuthFilter authFilter;
@Bean
public FilterRegistrationBean registerAuthFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(authFilter);
registration.addUrlPatterns("/*");
registration.setName("authFilter");
registration.setOrder(1); //值越小,Filter越靠前。
return registration;
}
//如果有多个Filter,再写一个public FilterRegistrationBean registerOtherFilter(){...}即可。通过 registration.setOrder(1); 来设置执行顺序,值越小优先级越高。
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue"); //
registration.setName("testFilter");
return registration;
}
}
最后实现各个filter
@Slf4j
@Component
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.debug("start to auth request validate...111");
HttpServletRequest req = (HttpServletRequest) request;
String token = req.getHeader("token");
if (token != null) {
// :TODO check token
log.info("auth success");
chain.doFilter(request, response);
} else {
log.err("auth failed");
}
}
}
注意:
1、如果指定了 Order 属性,执行的顺序与注册的顺序是无关的;
2、数字越小,优先级越高;