Java过滤器
课程内容
1 Java 过滤器概述
2 案例实现
中文编码字符集预处理
实现系统用户登陆安全控制
过滤器的作用
实现对web资源请求的拦截,完成特殊的操作,尤其是对请求预处理。
过滤器的应用场景
Web资源权限访问控制
请求字符编码处理
内容敏感字符词汇过滤
响应信息压缩
Java过滤器概述:
工作流程 生命周期特点 开发步骤 过滤器链
1、 web应用程序启动时,web服务器创建Filter的实例对象,以及对象的初始化
2、当请求访问与过滤器关联的Web资源时,过滤器拦截请求,完成指定功能
3、Filter对象创建后会驻留在内存,在web应用移除或者服务器停止时才销毁
Java过滤器概述
过滤器的实现步骤
1、编写java类实现Filter接口,并实现doFilter方法。
2、web.xml文件中对filter类进行注册,并设置所有拦截的资源。
过滤器链:
在一个web应用中,多个过滤器组合起来称之为一个过滤器链。
过滤器的调用顺序取决于过滤器在web.xml文件中的顺序客户端发送请求后,
Java过滤器对请求做预处理,预处理完成之后请求会传递到servlet.service()方法,
对请求进行处理并产生处理的结果,紧接着Java过滤器会拦截响应结果并对响应
结果做后处理,然后再将响应结果返回给客户端。
此处需要注意,java过滤器在对请求做预处理和后处理的过程中,需要调用到
过滤器的doFilter方法来进行,而预处理完成之后,就会将请求传递给系统做
出来,即调用servlet.service()方法进行请求的正式处理。
过滤器的使用:
首先写一个Class类,让它继承Filter的接口,接口中有三个方法
destory() doFilter(request,response,FilterChain) init();
/destory()是拦截器的销毁方法,每当服务器关闭的或重启的时候,
tomcat服务器自动调用destroy方法销毁实例化的对象。
/doFilter()是实现拦截的方法,其中有三个参数,前两个分别是
服务器的请求与响应,可以分别对服务器的请求做预处理,对
响应做后处理。第三个参数是过滤器链对象,对所有的过滤器
做了一个封装,它提供了一个doFilter()的方法,当我们过滤器
完成了doFilter()方法的时候,可以调用过滤器链的foFilter()方法
来通知过滤器,我的请求预处理完成了,可以接下来进行下一步
的操作了。
/在web服务器中的过滤器对象只会创建一个,并且会在服务器中
一直存在,过滤器对象在创建的时候只会调用执行init()方法一次,
后续在进行使用的时候不会在自行创建对象,除非对象被销毁。
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>filter.CharacterEncodingFilter</filter-class>
<init-param> //初始化参数
<param-name>systemName</param-name>
<param-value>filter Encoding</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern> //接受任何请求的拦截
</filter-mapping>
在实现Filter的接口的类中:
在init()
方法中有一个config参数,可以将参数保存在字段中。
在doFilter()
方法中使用:
String define = config.getInitParameter("define");
//获取web.xml中配置的字符集编码
request.setCharacterEncoding(config.getInitParameter("charset")); chain.doFilter(request, response);
过滤器的生命周期:
- web应用程序启动时,创建Filter的实例化对象,以及初始化对象。
- 当请求访问关联的Web资源时,过滤器拦截请求,完成指定功能。
- Filter对象创建后驻留内存,Web应用移除或者服务器停止时才销毁过滤器的创建和销毁有WEB服务器负责