目录
1、Filter是什么
2、原理
3、怎样使用
步骤:
Filter的执行流程:
拦截路径配置:
配置方式:
过滤器链:
1、Filter是什么
Filter是一个在计算机中用于筛选、过滤和修改数据的组件或模块。它在数据传输和处理的过程中对数据进行处理或拦截(处理数据流:从输入流中获取数据,对其进行处理后再将其写入输出流中),具有广泛的应用场景。
在Web中,Filter是Java Servlet规范中的一部分,用于拦截客户端请求和服务器响应,并对它们进行处理、过滤和转换。它允许对用户请求进行预处理,也可以对服务器响应进行后处理。可以用于权限控制(根据URL)、统一编码处理、过滤敏感词汇、压缩响应信息等高级功能。
如图:放行后访问对应资源,资源访问完成后,还会回到Filter中
具体来说,Filter可以在HttpServletRequest到达Servlet之前拦截请求,根据需要检查并修改请求头和数据。同样,在HttpServletResponse到达客户端之前,Filter也可以拦截响应,根据需要检查并修改响应头和数据。通过这种方式,Filter可以执行权限控制、日志记录、请求解码等多种功能。
Filter在其他领域也有应用,如在数据库中对数据进行过滤、在图像处理中对像素进行过滤等。
2、原理
Filter的原理关键在于其拦截和处理数据流的能力。当有数据流经过Filter时,Filter会根据预设的规则对数据进行操作,然后将处理后的数据传递给下一个组件或目标资源。这种机制使得Filter在数据处理和传输过程中起到了关键的作用。
此外,Filter还具有灵活性和可配置性。可以根据具体需求编写自定义的Filter,并在配置文件中指定其应用范围和过滤规则。这使得Filter能够适应各种复杂的应用场景,提高系统的可维护性和可扩展性。
3、怎样使用
步骤:
- 定义类,实现 Filter接口,并重写方法
- 配置Filter拦截资源的路径 @WebFilter注解 /* 表示拦截所有资源
- 在doFilter方法中放行
@WebFilter("/*")
public class FilterDemo 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("这是FilterDemo");
//放行
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
Filter的执行流程:
执行放行前逻辑-->放行-->访问资源-->执行放行后逻辑
拦截路径配置:
拦截路径表示 Filter 会对请求的哪些资源进行拦截:@WebFilter("拦截路径")
配置方式:
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*:访问所有资源,都会被拦截
可见,拦截路径的配置方式和 Servlet的请求资源路径配置方式一样,只是表示的含义不同。
过滤器链:
在一个Web应用,可以配置多个过滤器,称为过滤器链。
链式处理:一个请求可以经过多个Filter的处理,每个Filter都可以对请求进行修改或添加额外的信息。可以通过FilterChain对象将请求传递给下一个Filter或目标资源(注解配置Filter的优先级是按照过滤器类名(字符串)的自然排序)。