概念
- filter表示过滤器,是java web三大组件(Servlet、Filter、Listener)之一。
- Filter是一种拦截器组件,用于在请求到达Servlet之前或响应返回客户端之前对请求和响应进行处理。开发者可以使用Filter来实现日志记录、安全检查、字符编码转换、权限控制等功能。
Filter快速入门
使用步骤与Servlet的使用步骤非常相似
1. 步骤:
- 定义类,实现Filter接口,并重写其所有方法
- 配置Filter拦截资源的路径,在类上定义@WebFilter注解
- 在doFilter方法中放行
2. 代码示例:
@WebFilter("/*") //过滤所有资源
public class FilterDemo implements Filter {
// 生命周期方法,初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
//
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("filter 被执行了...");
// 放行
chain.doFilter(request,response);
// 放行后的代码(执行完资源代码后,返回响应前再执行这里的代码)
System.out.println("响应前执行的代码...");
}
// 生命周期方法,销毁过滤器
@Override
public void destroy() {
Filter.super.destroy();
}
}
3. Filter执行流程
4. 根据需求,配置不同的拦截资源路径
过滤器链
一个web应用可以配置多个过滤器,这多个过滤器称为过滤器链
多个过滤器的执行顺序:优先级按照过滤器类名(字符串)的自然排序,从第一位开始比较
案例:登录验证的过滤器
登录页面和注册相关资源不应该判断权限,所有用户可见,所以需要在过滤器中排除掉