struts2中使用session和拦截器控制权限

本文介绍了一种基于Struts2框架实现用户权限验证的方法。主要包括:登录时在session中设置验证标志;编写拦截器控制器类检查session状态;配置struts.xml以应用拦截器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在登录的session中设置一个属性。

     在登录的action中的execute方法中加入以下代码。     

@SuppressWarnings("unchecked")
     public String execute() throws Exception {
          if ("dj".equals(this.getUsername().trim()) && "123".equals(this.getPassword().trim())) {
              Map map = ActionContext.getContext().getSession();
              map.put("user","valid");
              return "success";
          } else  {
              this.addFieldError("username", "username or password error");
              return "failer";
          }
     }

    在这里我们假设用户名和密码分别为“dj”和“123”,即可通过验证,当然在实际开发中是需要到数据库中去查询的。先取得map,在map中设置一个值,其实就是在session中设置了一个值。

 

    2.写一个拦截器控制器类。    

public class AuthInterceptor extends AbstractInterceptor {
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            Map map = invocation.getInvocationContext().getSession();            
            if (map.get("user") == null) {
                return Action.LOGIN;
            } else {
                return invocation.invoke();
            }
        }
    }

    注意:这里的map其实是struts2将session转化而来的,map里装的就是session里的东西。如果map中的user为空,说明没有进行登录。

 

    3.配置struts.xml文件    

<struts>
    <package name="struts" extends="struts-default" >
        <interceptors>
            <interceptor name="adminInterceptor" class="com.dj.interceptor.AdminInterceptor"/>
            <interceptor-stack name="myInterceptorStack">
                <interceptor-ref name="adminInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
        </interceptors>
        <!--<default-interceptor-ref name="myInterceptorStack"/>-->
        <global-results>
            <result name="login">/login.jsp</result>
        </global-results>
        <action name="login" class="com.dj.action.LoginAction">
            <result name="input">/login.jsp</result>
            <result name="success">/register.jsp</result>
            <result name="failer">/login.jsp</result>
        </action>
        <action name="register" class="com.dj.action.RegisterAction" method="register">
            <result name="success">/success.jsp</result>
            <result name="input">/register.jsp</result>
            <interceptor-ref name="myInterceptorStack"/>
        </action>
     </package>
</struts>

 注意:这里不能配置<default-interceptor-ref name="myInterceptorStack"/>,因为这样配置会拦截所有的action,包括权限验证的Action,使得其永远不能登录,造成死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值