概念:
Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一
过滤器可以把对应的资源的请求拦截下来,从而实现一些特殊的功能
过滤器一般完成一些通用的操作,例如权限控制、统一编码处理、敏感字符处理等等
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("this is my filter start");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("this is my filter end");
}
@Override
public void destroy() {
}
}
注:
/*表示对所有资源进行拦截处理
filter.doFilter表示对资源的放行,由于过滤器是一个闭环的结构,所以在执行doFilter时,会立马处理请求中对应的servlet,当servlet发送response时,又会回到过滤器中,执行doFilter调用之后的代码
Filter拦截路径配置
拦截路径表示 Filter 会对请求的哪些资源进行拦截,使用 @WebFilter
注解进行配置。如:@WebFilter("拦截路径")
拦截路径有如下四种配置方式:
- 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
- 目录拦截:/user/*:访问/user下的所有资源,都会被拦截
- 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
- 拦截所有:/*:访问所有资源,都会被拦截
过滤器链
过滤器链是指在一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。
执行流程如下