struts2 Interceptor配置与使用 .

来源:互联网 发布:淘宝考试管制刀具 编辑:程序博客网 时间:2024/05/22 12:56

在应用权限控制时,可以在需要的时候写上自己的权限控制代码,这是可行的,不过总会产生大量的重复代码。DRY(Don't Repeat Yourself)不要写重复的代码,在调用目标方法之前或之后执行一些逻辑,这通常可以通过代理的方式来实现,Interceptor基于此。

实现一个登录验证的Interceptor:

[java] view plaincopyprint?
  1. /** 
  2.  * 权限控制Interceptor 
  3.  * @author Evan 
  4.  *  
  5.  */  
  6. public class LoginInterceptor extends AbstractInterceptor {  
  7.     private static final long serialVersionUID = -1044025795657340245L;  
  8.     @Override  
  9.     public String intercept(ActionInvocation actionInvocation) throws Exception {  
  10.         // 获取ActionContext   
  11.         ActionContext actionContext = actionInvocation.getInvocationContext();  
  12.         // 获取sessionMap   
  13.         Map<String, Object> session = actionContext.getSession();  
  14.           
  15.         String user=(String) session.get("user");  
  16.           
  17.         //如果用户名存在,且为Evan,程序继续执行,否则跳转到登录页面  
  18.         if(user != null && user.equals("Evan")){  
  19.             //继续执行   
  20.             return actionInvocation.invoke();  
  21.         }  
  22.         //向HttpServletRequest中添加属性,即request.setAttribute(msg,...)  
  23.         actionContext.put("msg""please login!");  
  24.         //返回LOGIN逻辑视图   
  25.         return Action.LOGIN;  
  26.     }  
  27. }  

struts.xml中的配置:

[xhtml] view plaincopyprint?
  1. <package name="struts2Prac" extends="struts-default" namespace="/">  
  2.         <interceptors>  
  3.             <!-- 定义Interceptor -->  
  4.             <interceptor name="loginInterceptor" class="cn.enjoylife.prac.interceptors.LoginInterceptor"/>  
  5.             <!-- 定义interceptor stack -->  
  6.             <interceptor-stack name="authenticationStack">  
  7.                 <interceptor-ref name="defaultStack"/>  
  8.                 <interceptor-ref name="loginInterceptor"/>  
  9.             </interceptor-stack>  
  10.         </interceptors>  
  11.         <!-- 如果没有定义,默认的interceptor stack为defaultStack,如果定义了则应用之 -->  
  12.         <default-interceptor-ref name="authenticationStack"/>  
  13.           
  14.         <action name="hello" class="cn.enjoylife.prac.action.HelloAction">  
  15.             <result name="success" >/success.jsp</result>  
  16.             <result name="login" >/login.jsp</result>  
  17.         </action>  
  18.     </package>  

如果不想将authenticationStack作为默认的interceptor stack,可以重新定义一个package用于管理其它的action映射;或者直接在action映射中引用struts默认的interceptor stack。

0 0