过滤器是由一个中间组件,用于拦截源数据和目的数据之间的消息,或者可以说是过滤二者之间的关系
过滤器可以过滤从客户端传递到服务器端的请求和响应: Filter过滤请求和响应
Web应用上部署多个过滤器
过滤器可以组成一个过滤器链。链中的每个过滤器负责特定的操作和任务,客户端的请求和响应在这些过滤器之间传递
过滤器的一些常见应用:
1:认证过滤:对用户请求进行统一的认证。
2:登录和审核过滤:对用户的访问请求进行记录和审核。
3:图像转换过滤:转换图像格式。
4:数据压缩过滤 :对用户发生的数据进行压缩,从而减少传输量。
5:加密过滤:对请求和响应进行加密解密处理。
6:令牌过滤
7:资源访问触发事件过滤
8:XSLT过滤
9:MIME-type过滤
过滤器API :
由容器实现接口:
----
javax.servlet.Filter
---
- javax.servlet.FilterChain
---- javax.servlet.FilterConfig
四个包装类:
---- javax.servlet.ServletRequestWrapper
---- javax.servlet.ServletResponseWrapper
---- javax.servlet.http.HttpServletRequestWrapper
---- javax.servlet.http.HttpServletResponseWrapper (在请求送到过滤器链的下一个组件之前更改请求的内容或者改变从前一个组件接收的响应)
Filter接口:
方法 描述
void init(FilterConfig) | 在应用程序启动时,由容器调用
----------------------------------------------------- |----------------------------------------------------------------
void doFilter(ServletRequest, | 对于每个URL映射到该过滤器的请求,
ServletResponse, FilterChain) | 由容器调用该方法。
---------------------------------------------------|-------------------------------------------------------------------
void destroy() | 在应用程序关闭时,由容器调用。
---------------------------------------------------|------------------------------------------------------------------
init()方法:
容器仅调用过滤器实例的
init()方法一次。在init()方法没有执行完之前,容器不会转发任何请求到过滤器。
过滤器的生命周期方法 ,过滤器API不提供Filter接口的任何实现 。自定义的过滤器必须明确地实现所有三个方法 。
doFilter()方法给过滤器对象一个机会来处理请求,转发请求到过滤器链中的下一个组件,或者自己回复客户端 。
FilterConfig接口 :
为过滤器提供初始化参数 。。。由Servlet容器实现
方法
描述
String getFilterName() 返回在部署描述文件中指定的过滤器的名称
String getInitParameter(String) 返回在部署描述文件中指定的参数的值
Enumeration getInitParameterNames() 返回在部署描述文件中指定的所有参数的名称
ServletContext getServletContext() 返回Web应用程序的ServletContext。过滤器可以使用ServletContext设置、获取application范围内的属性。