`
c_c
  • 浏览: 84180 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics