struts2 Interceptor配置与使用

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

实现一个登录验证的Interceptor:

[java]  view plain copy
  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 plain copy
  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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值