Struts2拦截器

服务器启动时实例化 StrutsPrepareAndExecuteFilter,读取struts所有配置文件,把每一个Action实例化,当一个请求访问的时候,StrutsPrepareAndExecuteFilter会把请求拦截下来,匹配一个ActionMapper,然后ActionMapper创建ActionProxy,然后执行默认拦截器栈,再执行Action,返回结果,然后默认拦截器再反向执行(做一些运行期监控和清理工作,不是每一拦截器都执行后置拦截),最后响应结果返回给页面

一、自定义拦截器,创建拦截器类,继承ActionInterceptor

  在struts.xml文件中配置拦截器和拦截器栈,将自定义的拦截器添加到创建的拦截器栈中,并在拦截器栈中引入默认的拦截器栈defaultStack,最后设置默认拦截器引用设置为创建的拦截器栈。

 1 <package name="myStruts-Default" extends="struts-default" abstract="true">
 2         <interceptors>
 3             <!--  配置我们自己的拦截器 -->
 6             <interceptor name="myInterceptor" class="com.rl.interceptor.MyInterceptor"></interceptor>
 7             <!--  拦截器栈:是把多个拦截器集中到一起统一被引用 -->
10             <interceptor-stack name="rlStack">
11                 <!--  拦截器栈中要引用已经配置好的拦截器或者拦截器栈-->
14                 <interceptor-ref name="defaultStack"></interceptor-ref>
15                 <interceptor-ref name="myInterceptor"></interceptor-ref>
16             </interceptor-stack>
17         </interceptors>
18         <!--  把rlStack作为默认拦截器,只要继承了myStruts-Default,执行Action时就会自动先执行rlStack中的所有拦截器 -->
21         <default-interceptor-ref name="rlStack"/>
22     </package>

二、排除Action的拦截

  创建拦截器继承 MethodFilterInterceptor 

1 <!-- 当前Action需要主动管理默认拦截器栈 -->
2             <interceptor-ref name="rlStack">
3                 <!-- 指定要排除的拦截器  name:要排除的拦截器的名字.exludeMethods 元素:要排除的方法-->
4                 <param name="myInterceptor1.excludeMethods">delete</param>
5             </interceptor-ref>

 

posted @ 2018-03-25 19:35  cat_fish  阅读(108)  评论(0编辑  收藏  举报