Struts2的登录和权限控制用到的是拦截器

12 篇文章 0 订阅

Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultStack。因为登录和访问权限拦截是全局的,拦截返回的结果有些也是全局的。


  <packagename="struts-my"extends="struts-default">

      <interceptors>
       <!--判断是否登录和是否有访问权限  -->
       <interceptorname="auth" class="athenticationInterceptor"/>      
       <interceptor-stackname="myStack">
            <interceptor-refname="auth"></interceptor-ref> 
            <interceptor-refname="defaultStack"></interceptor-ref>          
        </interceptor-stack>          
      </interceptors>
      
      <default-interceptor-refname="myStack"></default-interceptor-ref>      
      <!--  全局结果-->
      <global-results>
       <!--拦截没登录返回结果 -->
            <resultname="noLogin"type="redirect">/jsp/no_login.jsp</result>
            <!--拦截没有权限返回结果 -->
            <resultname="noPower"type="redirect">/jsp/no_power.jsp</result>
      </global-results>  
     </package>
          
 <package name="default"extends="struts-my">
         <!--登录登出不需要拦截让它们已入 defaultStack-->
      <actionname="login" class="loginAction"method="login">
       <resultname="input">/jsp/login.jsp</result>
       <resultname="success"type="redirect">/jsp/index.jsp</result>
       <interceptor-refname="defaultStack"></interceptor-ref>
      </action>
      
      <actionname="logout" class="loginAction"method="logout">
       <resultname="success">/jsp/login.jsp</result>
       <interceptor-refname="defaultStack"></interceptor-ref>
      </action>

。。。。。。。。。

 


    需要说明的是,登录和登出是不需要拦截的(或者其它不需要拦截的),我们让它们的拦截器继承defaultStack。局部权限高于全局定义的,它们的拦截器栈就是默认的,不是自定义的。

 

    在登陆成功后,我把“user”放到了session中,我还有一张权限表,里面存的是权限组id和访问的权限。用户表里存放权限组id,这样就可以知道用户有什么权限了。我实现拦截的类是这样写的。


public class AuthenticationInterceptor extendsAbstractInterceptor {

//这个是需要用到的自定义的方法。

private GroupPowerService groupPowerService;

public String intercept(ActionInvocation invocation) throwsException {
   
  Map map=invocation.getInvocationContext().getSession();
       
        if(map.get("user")==null)
        {
            return "noLogin";
        }
        else
        {
         //得到用户的权限id和 访问的类名
         intid = ((User)map.get("user")).getGroupId();
         //拦截的action的名字
         Stringaction =invocation.getInvocationContext().getName(); 
         
         //通过用户id和拦截的action名判断用户是否有这个权限          
         if(this.groupPowerService.hasPower(id,action))
          //继续执行不拦截
          returninvocation.invoke();
         
         return"noPower";
        }
 }

public GroupPowerService getGroupPowerService() {
  returngroupPowerService;
 }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值