利用Struts2的拦截器进行权限控制

1.在struts.xml中配置一个默认的拦截器,用于权限拦截。具体代码如下:

        <interceptors>   
          <interceptor name="authority" class="en.estar.utils.AuthorityInterceptor"/>    
          <interceptor-stack name="authorityStack">   
            <interceptor-ref name="authority"></interceptor-ref>   
            <interceptor-ref name="defaultStack"></interceptor-ref>   
          </interceptor-stack>   
        </interceptors>   
  <default-interceptor-ref name="authorityStack"></default-interceptor-ref>  <!-- 配置默认权限拦截器 -->

2.上述配置中有一个拦截器的实现类AuthorityInterceptor,该类继承了AbstractInterceptor类,并且需要实现该类的一个方法public String intercept(ActionInvocation ai) throws Exception。具体代码如下:

  public String intercept(ActionInvocation ai) throws Exception {
  ActionContext context = ai.getInvocationContext();
  String actionName = ai.getProxy().getActionName();

  if(!"login".equals(actionName)){
   Map map = context.getSession();
   String username = (String)map.get("username");//获得session范围的用户名
   if(username==null||"".equals(username)){
    context.put("loginmessage", "对不起,您还没有登录!");
    return Action.LOGIN;//如果用户名为空,则跳回到登陆页面
   }else{
    return ai.invoke();
   }
  }else{//如果用户斤进行登录操作则放行
   return ai.invoke();
  }

 }

 当访问除login以外的任何一个action的时候,该拦截器方法就会生效,从session中获得用户名,如果为空,则表示用户

还没有登录就想访问这个action,这种情况下当然是不允许的,所以拦截器会强制让应用跳回到login.jsp页面。其中Action.LOGIN。对应了一个视图,该视图是一个global视图,

  <global-results><!-- 全局跳转,用于权限验证失败时的跳转目的地 -->
     <result name="login">/login.jsp</result>
  </global-results>

 

 这样就完成了权限的拦截。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值