过滤器(Filter)

过滤器(Filter)

1. 基本概念

过滤器(Filter)是拦截 Request 请求的对象:在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。

Filter 相关的接口有:Filter、FilterConfig、FilterChain 。

Filter 的实现必须实现 Filter 接口。这个接口包含了 Filter 的3个生命周期方法:init()doFilter()destroy()

Servlet 容器(Tomcat)初始化Filter时,会触发 Filter 的 init() 方法,一般来说是在应用开始时(注意,不是第一次使用时)。这个方法只会被调用一次。

FilterConfig 对象由 Servlet 容器传入 init() 方法中。

当 Servlet 容器每次处理 Filter 相关的资源时,都会调用该 Filter 实例的 doFilter() 方法。就像容器调用 Serviet 的 service() 方法。

在 Filter 的 doFilter() 方法中,最后一行需要调用 FilterChain 中的 doChain() 方法。注意,FilterChain 是 doFilter() 方法的第三个参数。

一个 URL 资源可能被多个 Filter 关联(即一条 Filter 链),这时 Filter.doFilter() 的方法将触发 Filter 链中下一个 Filter。只有在 Filter 链中最后一个 Filter 里调用 doFilter() 方法,才会触发 Controller 中处理 URL 资源的方法。

如果在 Filter 的 doFilter() 方法中,因为故意(或无意)没有调用 FilterChain 的 doFilter() 方法,那么这个 Request 请求将终止,后面的处理就会中断。

注意,FilterChain 接口中,唯一的方法就是 doFilter() 方法,它和 Filter 接口中的 doFilter() 方法定义是不一样的。

Filter 接口中,最后一个方法是 destroy(),该方法在 Servlet 容器要销毁 Filter 时触发。

类似于 Servlet,Filter 也是单例。

2. Filter 的配置

和 Servlet 的配置非常相似,Filter 的配置主要有三方面:

  • 确认哪些资源需要本 Filter 进行拦截处理。
  • 配置 Filter 的初始化参数和值,这些参数在 Filter 的 init() 方法中可以读取到。
  • 给 Filter 取一个名称(一般来说这个配置是不需要的)。在一些特殊的情况下,系统通过这个名字来识别Filter。
@WebFilter(filterName = "firstFilter",
            urlPatterns = {
   "/*"},
            initParams = {
   
                @WebInitParam(name="", value=""),
                @WebInitParam(name="", value="")
            })
public class FirstFilter implements Filter {
   
    ...
}
<filter>
    <filter-name>firstFilter</filter-name>
    <filter-class>com.hemiao.filter.FirstFilter</filter-class>
    <init-param>
        <param-name>author</param-name>
        <param-value>ben</param-value>
    </init-param>
    <init-param>
        <param-name>email</param-name>
        <param-value>hemiao3000@126.com</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>firstFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

相关推荐

  1. 过滤器Filter

    2024-02-22 08:04:04       44 阅读
  2. 过滤器 -- Filter

    2024-02-22 08:04:04       36 阅读
  3. Filter过滤器学习使用

    2024-02-22 08:04:04       45 阅读
  4. 【Vue项目】filters过滤器

    2024-02-22 08:04:04       52 阅读
  5. Vue.js(过滤器(Filter))

    2024-02-22 08:04:04       28 阅读
  6. Cookie Session和过滤器Filter

    2024-02-22 08:04:04       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 08:04:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 08:04:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 08:04:04       82 阅读
  4. Python语言-面向对象

    2024-02-22 08:04:04       91 阅读

热门阅读

  1. Hive JDBC

    Hive JDBC

    2024-02-22 08:04:04      50 阅读
  2. Hive UDF

    Hive UDF

    2024-02-22 08:04:04      52 阅读
  3. 【K-means聚类】

    2024-02-22 08:04:04       46 阅读
  4. 机器学习是什么?

    2024-02-22 08:04:04       48 阅读
  5. http缓存?强制缓存和协商缓存?

    2024-02-22 08:04:04       46 阅读
  6. 利用System.Web.HttpRuntime.Cache制作缓存工具类

    2024-02-22 08:04:04       55 阅读