过滤器:
1、添加注解@WebFilter
参数解释如下:
属性名 | 类型 | 描述 |
---|---|---|
filterName | String | 指定过滤器的 name 属性,等价于 <filter-name> |
value | String[] | 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。 |
urlPatterns | String[] | 指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。 |
servletNames | String[] | 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。 |
dispatcherTypes | DispatcherType | 指定过滤器的转发模式。具体取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 |
initParams | WebInitParam[] | 指定一组过滤器初始化参数,等价于 <init-param> 标签。 |
asyncSupported | boolean | 声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。 |
description | String | 该过滤器的描述信息,等价于 <description> 标签。 |
displayName | String | 该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。 |
平常使用时参数一般使用两个
@WebFilter(urlPatterns = "/*",filterName = "doTimeFilter")
urlPatterns = "/*"表示过滤根路径,
2、实现Filter接口
3、配置工具类必需注解,通过添加@Configuration或@Component,或在application启动类中配置@ServletComponentScan()指定过滤器工具类所在包路径都可以。
下面是实现一个简单地请求计时功能,过滤请求时赋值一个时间戳,在请求送达后系统时间减去时间戳获取这个请求所用时间:
@WebFilter(urlPatterns = "/*",filterName = "doTimeFilter")
@Component
public class doTimeFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException, IOException {
long start = System.currentTimeMillis();
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("LogFilter2 Execute cost=" + (System.currentTimeMillis() - start));
}
@Override
public void destroy() {
}
}
其中filterChain.doFilter()是在过滤器操作过后将处理完的请求发给servlet;
另外过滤器可以配置多个,多个过滤器之间可以通过注解@Order(1)设置过滤器执行顺序,参数数值越低越优先执行;如果不指定Order的话,会默认按照filterName的首字母(A、B、C...Z)进行排序;