Java过滤器原理方法

 

过滤器可以对资源的请求和相应提供过滤功能,配置在web.xml文件中。
过滤器可用来实现以下功能
1. 权限过滤
2. 登陆和检查验证
3. 图像转换
4. 数据压缩
5. 加密
6. 令牌验证
7. 触发访问资源的事件
8. XSL/T过滤
9. Mime-type chain过滤

在filter服务被加载到web容器中时首先调用init函数,且仅调用一次,如果init函数调用失败,filter将不能工作。参数FilterConfig对象包含过滤器在web.xml中的配置参数。

 

过滤功能在doFilter函数中实现,包含ServletContext参数。doFilter函数在每次请求或响应经过过滤器链的时候被调用,FilterChain.doFilter用于调用下一个过滤器的doFilter方法。

该函数可实现:
1. 检查request
2. 替换请求内容或请求头信息
3. 替换响应内容或响应头信息

 

destroy方法由web容器调用,指示它正在退出服务的过滤器。此方法仅调用一次,即当过滤器的doFilter方法​​中的所有线程都退出后或超时时间已过。
Web容器调用此方法后,这个过滤器的doFilter方法将不会再被调用​​。
该方法让过滤器可以清理其占有的资源,如内存,文件和线程,并确保任何持久性状态与内存中的过滤器的当前状态同步。

 

Example:

web.xml

 1  <filter>
 2     <filter-name>filter1</filter-name>
 3     <filter-class>com.filter.MyFilter</filter-class>
 4  </filter>
 5  <filter-mapping>
 6     <filter-name>filter1</filter-name>
 7     <url-pattern>/*</url-pattern>
 8  </filter-mapping>
 9     
10  <filter>
11     <filter-name>filter2</filter-name>
12     <filter-class>com.filter.MyFilter</filter-class>
13  </filter>
14  <filter-mapping>
15     <filter-name>filter2</filter-name>
16     <url-pattern>/*</url-pattern>
17  </filter-mapping>    

在web.xml文件中配置两个过滤器filter1和filter2,拦截所有请求

MyFilter.java

 1 public class FilterOne implements Filter {
 2 
 3     //Filter 链的执行
 4     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
 5             throws IOException, ServletException {
 6         // 对请求进行过滤
 7         System.out.println("filter one before");
 8 
 9         // 下一个过滤器或
10         arg2.doFilter(arg0, arg1);
11 
12         // 对响应的过滤
13         System.out.println("filter one after");
14     }
15 
16     // 初始化过滤器
17     public void init(FilterConfig arg0) throws ServletException {
18         System.out.println("filter one init");
19     }
20 
21     // 释放过滤器使用的资源
22     public void destroy() {
23         System.out.println("filter one destroy");
24     }
25 
26 }

输出:

filter one before

filter two before

filter two after

filter one after

转载于:https://www.cnblogs.com/luangeng/p/5624976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值