首页 > 技术文章 > struts2 权限拦截器 拦截没有登陆的请求

wuyou 2013-09-10 20:18 原文

假设有这样的登陆:

ActionContext.getContext().getSession().put("UserMsg", userMsg);

则可以这样判断是否登陆:

import com.ahgw.common.sessionBean.UserMsg;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * 负责后台权限访问(必须登陆才可以进入后台)
 * User: HYY
 * Date: 13-5-27
 * Time: 下午8:27
 * To change this template use File | Settings | File Templates.
 */
public class AdminInterceptor extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        ActionContext context = actionInvocation.getInvocationContext();
        UserMsg userMsg = (UserMsg) context.getSession().get("UserMsg");
        if (userMsg == null) {
            return Action.LOGIN;
        }
        return actionInvocation.invoke();
    }
}

其相应的strut配置如下:

<struts>
    <package name="admin-newsManage" extends="struts-default,json-default" namespace="/newsManage">
        <interceptors>
            <interceptor name="privilege" class="com.ahgw.admin.interceptor.AdminInterceptor"/>
            <interceptor-stack name="privilegeStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="privilege"/>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="privilegeStack"/>

        <global-results>
            <result name="login" type="redirect">/admin.do</result>
        </global-results>

    </package>
</struts>

这样,该package下的所有action中的execute方法进行之前,都会经过interceptor拦截器的判断,即进行权限判断,如果已经登陆,则会转入action中,否则返回登陆视图。

 

其中包含struts2拦截器堆栈的知识,这里不进行展开了。

推荐阅读