Struts2使用MethodFilterInterceptor来实现方法拦截器

来源:互联网 发布:js跨域方法 编辑:程序博客网 时间:2024/06/13 00:01

如果要对action类的指定方法进行拦截,拦截器的类需要继承MethodFilterInterceptor

将AbstractInterceptor方法先隐藏


package mypro;
import java.util.Map;
import java.util.Set;


import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;


public class loginInterceptor extends MethodFilterInterceptor{

   
/*public String intercept(ActionInvocation actionInvocation) throws Exception
    {
            Map session = actionInvocation.getInvocationContext().getSession();
       
            if(null == session.get("email")){
            return "unlogin";
            }
            return actionInvocation.invoke();               
    }*/


    @Override
    public void setExcludeMethods(String excludeMethods) {
        super.setExcludeMethods(excludeMethods);
    }


    @Override
    public Set<String> getExcludeMethodsSet() {
        return super.getExcludeMethodsSet();
    }


    @Override
    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
        Set<String> ss = getExcludeMethodsSet();
        String actionname = actionInvocation.getProxy().getActionName().toString();
        for (String s : ss) {
            if (actionname.equals(s)) {
                return actionInvocation.invoke();
            }
        }
        Map session = actionInvocation.getInvocationContext().getSession();
        if (null == session.get("email")) {
            return "unlogin";
        }
        return actionInvocation.invoke();
    }
}


在struts.xml action中配置要拦截的方法和不需要拦截的方法



<interceptors>
<interceptor name="loginCheck" class="mypro.loginInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="loginCheck">
<param name="excludeMethods">handleLogin,login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"></default-interceptor-ref>
   
    <global-results>
    <result name="unlogin">/templets/login.jsp</result>
    <result name="error">/error.jsp</result>
    </global-results>

阅读全文
0 0
原创粉丝点击