Springboot--使用@WebFilter-web过滤器
一、使用@WebFilter-web过滤器
web三大组件之一,其他两个是@WebListener,Intecepter
1、启动类添加@ServletComponentScan
@ServletComponentScan
@SpringBootApplication
publicclass Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
2、自定义WebFilter
@Slf4j
@WebFilter
publicclass ReqFilter implements Filter {
public ReqFilter() {
System.out.println("init reqFilter");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
log.info("url={}, params={}", req.getRequestURI(), JSON.toJSONString(req.getParameterMap()));
chain.doFilter(req, response);
}
@Override
public void destroy() {
}
}
3、WebFilter的常用属性如下
4、设置Filter的优先级
注意**@Order 注解不能指定 Filter 优先级**
@WebFillter 方式注册的默认优先级为2147483647,采用Bean注册的方式优先级可以指定。
@Bean
public FilterRegistrationBean<OrderFilter> orderFilter() {
FilterRegistrationBean<OrderFilter> filter = new FilterRegistrationBean<>();
filter.setName("reqFilter");
filter.setFilter(new ReqFilter());
// 指定优先级
filter.setOrder(-1);
return filter;
}
二、直接通过Bean的方式注册拦截器,指定优先级
@Order(1)
@Component
public class ReqFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("req filter");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
@Order(10)
@Component
public class OrderFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("order filter!");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
