浙林龙哥

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

from: 成长之路 http://xugw.blog.sohu.com/124311370.html

 

做拦截器的两个步骤

1.写一个自己的拦截器
public class PrivilegeCheckInterceptor extends AbstractInterceptor {
        //实现拦截器接口
 public String intercept(ActionInvocation invocation) throws Exception {
           System.out.println("PrivilegeCheckInterceptor");
     return invocation.invoke();
    }
}
2.配置全局的拦截器(struts.xml)
  <struts>
 <package name="default" extends="struts-default">
 <interceptors>
 <interceptor name="myinterceptor" class="test.interceptor.PrivilegeCheckInterceptor" />
 <interceptor-stack name="mystack">
 <interceptor-ref name="myinterceptor" />
 <interceptor-ref name="defaultStack" />
 </interceptor-stack>
 </interceptors>
 
 <default-interceptor-ref name="mystack" />
 
 <action name="users1"
 class="test.action.UserManagementAction">
 <result name="input">/index.jsp</result>
 <result name="success">/success.jsp</result>
 </action>
 
 </package>
</struts>
这样配置后所有在package之内定义的Action,都将被PrivilegeCheckInterceptor 拦截
注解的方式(annotation)也可以配置拦截器,但是全局的拦截器还是要用struts.xml配置
注意:拦截的配置应该放在action的前面
问题:convention和拦截器(全局)的配合问题。convention是零配置的,而拦截器是要在struts.xml中定义的,
      如何为所有的action指定一个全局的拦截器呢?(这个问题好,我找了好久才找到这个解答)
解决:利用struts2的package继承关系,ParentPackage的拦截器会被ChildPackage所继承。
      在struts.xml中定义好拦截器
      在struts.properties中加入
      struts.convention.default.parent.package=default
      注意这个包名(default)要和struts.xml中的包名一致
      <package name="default" extends="struts-default">
      也可以在Action中用@ParentPackage("default")的方式指定父包的名称
问题: 如何获得被截取的方法名
解决: 利用拦截器的对象ActionInvocation 
        ActionProxy proxy = actionInvocation.getProxy(); 
        proxy.getMethod(); 
posted on 2010-01-01 10:42  浙林龙哥  阅读(629)  评论(0编辑  收藏  举报