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

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,使得其永远不能登录,造成死循环。

你可能感兴趣的:(exception,struts,session,Interceptor,Class,action)