Servlet Filter
什么是 Filter
Filter 可以拦截请求和响应,在请求到达 Servlet 程序前,进行预处理,如鉴权,修改 Http 请求头,拦截返回,加入自己的逻辑
Filter 如何实现拦截
- 当客户端发生请求后,在 HttpServletRequest 到达 Servlet 之前,过滤器拦截客户的 HttpServletRequest 。
- 根据需要检查 HttpServletRequest ,也可以修改 HttpServletRequest 头和数据。
- 在过滤器中调用 doFilter 方法,对请求放行。请求到达 Servlet 后,对请求进行处理并产生 HttpServletResponse 发送给客户端。
- 在 HttpServletResponse 到达客户端之前,过滤器拦截 HttpServletResponse 。
- 根据需要检查 HttpServletResponse ,可以修改 HttpServletResponse 头和数据。
- 最后,HttpServletResponse 到达客户端。
生命周期
方法
- init()方法:初始化参数,在创建 Filter 时自动调用。当我们需要设置初始化参数的时候,可以写到该方法中。
- doFilter()方法:拦截到要执行的请求时,doFilter 就会执行。这里面写我们对请求和响应的预处理。
- destroy()方法:在销毁 Filter 时自动调用。
生命周期
Filter 的创建和销毁由 web 服务器控制。
- 服务器启动的时候,web 服务器创建 Filter 的实例对象,并调用其 init 方法,完成对象的初始化功能。filter 对象只会创建一次,init 方法也只会执行一次。
- 拦截到请求时,执行 doFilter 方法。可以执行多次。
- 服务器关闭时,web 服务器销毁 Filter 的实例对象。
FilterConfig
用 户在配置 filter 时,可以使用
- String getFilterName():得到 filter 的名称。
- String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回 null.
- Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
- public ServletContext getServletContext():返回 Servlet 上下文对象的引用。
FilterChain
如果有多个 Filter,则请求会按照 web.xml 里 filtermapping 的先后顺序将请求发给 filter,直到,没有下一个 filter 了,请求会被转给 Servlet
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小周の代码之路!
评论