Struts2中用拦截器判定是否已经登录

来源:互联网 发布:网络管理看什么书 编辑:程序博客网 时间:2024/05/02 20:26

转载自:http://www.mathapply.cn/Applys/showpaper/pid/227#0-qzone-1-48969-d020d2d2a4e8d1a374a433f596ad1440

 

通常一个网站有很多资源是需要登录后才能访问的,因此需要在用户访问Action时判定是否用户登录了,如果在每一个Action里去写判定比较麻烦。在Struts2中很方面的用拦截器实现。

首先定义一个类

public class AuthorityInterceptor extends AbstractInterceptor {

@Override
public String intercept(ActionInvocation invocation) throws Exception
{
    ActionContext ctx = invocation.getInvocationContext();
    Map<String,Object> session = ctx.getSession();
    Object object = session.get("USER_ID"); //登录后在session中存入 USER_ID
    String name = ctx.getName();
    
    if(object != null || name.equals("Admin_Login")){ //session存在用户已经登录,用户访问的是登录的Action,都放行
        return invocation.invoke();
    }else{
        return Action.LOGIN; // 否则返回登录页面
    }
}

}

Struts.xml文件中,定义拦截器如下。

<package name="Admin_actions" namespace="/" extends="struts-default">

        
         <!-- 定义一个拦截器 -->  
        <interceptors>  
            <interceptor name="authority"  
                class="yycx.action.AuthorityInterceptor">  
            </interceptor>  
            <!-- 拦截器栈 -->  
            <interceptor-stack name="mydefault">  
                <interceptor-ref name="defaultStack" />  
                <interceptor-ref name="authority" />  
            </interceptor-stack>  
        </interceptors>  
 
        <!-- 定义全局Result -->  
        <global-results>  
            <!-- 当返回login视图名时,转入/login.jsp页面 -->  
            <result name="login">/Admin/login.html</result>  

        </global-results> 


<action name="Admin_*" class="yycx.action.AdminAction" method="{1}">
                 
                    <result name="loginsuc">/Admin/main.jsp</result>
                  <result name="loginfail">/Admin/loginFail.jsp</result>
                  
                  <interceptor-ref name="mydefault" />  // 对该Action进行拦截处理
</action>

</package>

实现这几部就可以进行登录判定了,是不是很方便啊?

 

0 0
原创粉丝点击