简介
在请求到达目标资源之前先对请求进行拦截过滤,对请求进行一些处理;也可以在响应到达客户端之前先对相应进行拦截过滤,对响应做出一些处理
生命周期
实现
- 在doFilter中对请求和响应进行处理,不过处理后得调用filterChain的doFilter方法,将请求放行到下一个资源。
- Filter在应用启动的时候就会创建并且初始化,是单例多线程的
- Filter也可以对要访问的servlet进行拦截,
@WebFilter("/*",servletNames = {})
public class someFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("此时请求被拦截在了过滤器中,对请求进行处理");
// 要把请求传到服务器需要调用chain.doFilter,将请求放行到下一个资源
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("在chain,doFilter之后对响应进行处理");
}
//Filter在应用启动时就创建并初始化,是单例多线程的
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
filterConfig可以获取到的信息
dispatherTypes标签
dispatherType可选值
@WebFilter(value = "/*",dispatcherTypes = DispatcherType.FORWARD)
例如选择了DispatcherType.FORWARD之后,Filter只对请求转发进行过滤,不再对其他不符合的请求过滤了。
默认是request,只拦截普通请求
error是当跳转到指定的错误处理页面时,这个跳转请求会被过滤器拦截
url-partern
- */是对全路径进行匹配
- / 是只对静态资源进行拦截,而不会拦截动态资源