1.Filter概述
Servlet Filter又称Servlet过滤器,它是在Servlet2.3规范中定义的,能够对Servlet容器传给Web资源的request对象和response对象执行检查和修改。
Filter不是Servlet,不能直接访问,其本身也不能生成request对象和response对象,只能为web资源提供以下过滤功能:
(1)在web资源被访问前,检查request对象,修改请求头和请求正文,或对请求执行预处理操作。
(2)将请求传递到下一个过滤器或目标资源。
(3)在web资源被访问后,检查response对象,修改响应头和响应正文。
Filter是Servlet规范中最实用的技术,通过其可对服务器管理的所有web资源(jsp,servlet,html等)拦截,从而实现特殊的功能,例如用户权限控制、过滤敏感词、设置统一编码格式等。
注意:过滤器并不是必须要将请求传递到下一个过滤器或目标资源,可自行对请求处理,并发送响应给客户端,也可以将请求转发或重定向到其他web资源。
2.Filter接口
与开发Servlet需要实现javax.servlet.Servlet接口类似,开发过滤器要实现javax.servlet.Filter接口,并提供一个公开的不带参数的构造方法,在Filter接口中,定义了3个方法,如下所示:
(1)init():该方法用于初始化过滤器。
(2)doFilter():该方法完成实际的过滤操作,当客户端请求的URL与过滤器映射的URL匹配时,容器会先调用该方法对请求进行拦截。
(3)destroy():该方法在销毁Filter对象之前被调用,用于释放被Filter对象占用的资源。
3、Filter的工作流程