一、使用@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的常用属性如下
filterName | String | 指定过滤器的 name 属性,等价于 |
---|---|---|
value | String[] | 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。 |
urlPatterns | String[] | 指定一组过滤器的 URL 匹配模式。等价于标签。 |
servletNames | String[] | 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中的取值。 |
dispatcherTypes | DispatcherType | 指定过滤器的转发模式。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 |
initParams | WebInitParam[] | 指定一组过滤器初始化参数,等价于标签。 |
asyncSupported | boolean | 声明过滤器是否支持异步操作模式,等价于标签。 |
description | String | 该过滤器的描述信息,等价于标签。 |
displayName | String | 该过滤器的显示名,通常配合工具使用,等价于标签。 |
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() {
}
}