Servlet 过滤器

2025年3月17日 | 阅读 3 分钟

过滤器是一个在请求的预处理和后处理时调用的对象。

它主要用于执行过滤任务,例如转换、日志记录、压缩、加密和解密、输入验证等。

Servlet 过滤器是可插拔的,即它的条目在 web.xml 文件中定义,如果我们从 web.xml 文件中删除过滤器的条目,过滤器将自动删除,我们不需要更改 Servlet。

因此维护成本会更低。

filter

注意:与 Servlet 不同,一个过滤器不依赖于另一个过滤器。

过滤器 的用法

  • 记录所有传入的请求
  • 记录请求发出的计算机的 IP 地址
  • 转换
  • 数据压缩
  • 加密和解密
  • 输入验证等。

过滤器的优点

  1. 过滤器是可插拔的。
  2. 一个过滤器不依赖于另一个资源。
  3. 更少的维护

过滤器 API

像 Servlet 一样,过滤器有自己的 API。 javax.servlet 包包含 Filter API 的三个接口。

  1. Filter
  2. FilterChain
  3. FilterConfig

1) 过滤器接口

要创建任何过滤器,您必须实现过滤器接口。过滤器接口为过滤器提供了生命周期方法。

方法描述
public void init(FilterConfig config)init() 方法仅调用一次。它用于初始化过滤器。
public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain)当用户请求到过滤器映射到的任何资源时,都会调用 doFilter() 方法。它用于执行过滤任务。
public void destroy()当过滤器从服务中取出时,仅调用一次。

2) FilterChain 接口

FilterChain 的对象负责调用链中的下一个过滤器或资源。此对象在过滤器接口的 doFilter 方法中传递。FilterChain 接口只包含一个方法

  1. public void doFilter(HttpServletRequest request, HttpServletResponse response): 它将控制传递给下一个过滤器或资源。

如何定义过滤器

我们可以像 servlet 一样定义过滤器。让我们看看过滤器的元素和过滤器映射。

对于映射过滤器,我们可以使用 url-pattern 或 servlet-name。 url-pattern 元素比 servlet-name 元素具有优势,即它可以应用于 Servlet、JSP 或 HTML。


过滤器的简单示例

在这个例子中,我们只是显示了过滤器在请求的后处理完成后自动调用的信息。

index.html

MyFilter.java

HelloServlet.java

web.xml
为了定义过滤器,web-app 的过滤器元素必须像 servlet 一样定义。
下一个主题身份验证过滤器