Filter执行顺序及其项目实践中的影响

问题出处

当一个项目中出现两个或两个以上的filter时,就会产生此问题——哪个filter先执行、哪个后执行。

 

实践总结

filter的执行顺序和web.xml中filter-mapping的前后顺序一致,而与filter定义的先后无关。

举例,假如你的web.xml有如下配置片段:

 

  <filter-mapping>
     <filter-name>SessionFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>SystemFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 那么则实际运行中会先执行SessionFilter、后执行SystemFilter.

 

 

实践应用

在实际项目中,多见的是在使用struts框架+filter过滤时(如果你没有使用filter而是struts的intercepter,不在此文讨论范围内),比如有如下结构:

* StrutsPrepareAndExecuteFilter - 负责调度action

* SessionFilter - 负责用户登录审查

大家知道struts对web应用的侵入就是靠它的一个filter(StrutsPrepareAndExecuteFilter)来完成的,而此时我们另外有SessionFilter来过滤非法用户对action的访问。

显然我们期望的顺序是:首先过滤非法用户对action的访问,其后在根据请求地址调度相应的action或jsp.

但是如果此时不注意filter顺序,常常会遇到意想不到的问题,而解决办法就是按照正确的顺序在web.xml中定义:

  <filter-mapping>
     <filter-name>SessionFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值