您的位置:首页 > 编程语言 > Java开发

Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法

2014-09-24 21:10 429 查看
参考:http://blog.csdn.net/coolcoffee168/article/details/7963251

 在配置struts2 拦截器属性excludeMethods、includeMethods进行方法过滤时发现不起作用。

       经过查看书籍之后发现,要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。MethodFilterInterceptor类是AbstractInterceptor的子类,其源代码如下:

[java]
view plaincopy

public abstract class MethodFilterInterceptor extends AbstractInterceptor {  
    protected transient Logger log = LoggerFactory.getLogger(getClass());  
      
    protected Set<String> excludeMethods = Collections.emptySet();  
    protected Set<String> includeMethods = Collections.emptySet();  
  
    public void setExcludeMethods(String excludeMethods) {  
        this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods);  
    }  
      
    public Set<String> getExcludeMethodsSet() {  
        return excludeMethods;  
    }  
  
    public void setIncludeMethods(String includeMethods) {  
        this.includeMethods = TextParseUtil.commaDelimitedStringToSet(includeMethods);  
    }  
      
    public Set<String> getIncludeMethodsSet() {  
        return includeMethods;  
    }  
  
    @Override  
    public String intercept(ActionInvocation invocation) throws Exception {  
        if (applyInterceptor(invocation)) {  
            return doIntercept(invocation);  
        }   
        return invocation.invoke();  
    }  
  
    protected boolean applyInterceptor(ActionInvocation invocation) {  
        String method = invocation.getProxy().getMethod();  
        // ValidationInterceptor  
        boolean applyMethod = MethodFilterInterceptorUtil.applyMethod(excludeMethods, includeMethods, method);  
        if (log.isDebugEnabled()) {  
            if (!applyMethod) {  
                log.debug("Skipping Interceptor... Method [" + method + "] found in exclude list.");  
            }  
        }  
        return applyMethod;  
    }  
      
    /** 
     * Subclasses must override to implement the interceptor logic. 
     *  
     * @param invocation the action invocation 
     * @return the result of invocation 
     * @throws Exception 
     */  
    protected abstract String doIntercept(ActionInvocation invocation) throws Exception;  
      
}  

只需要实现该类中的

[java]
view plaincopy

protected abstract String doIntercept(ActionInvocation invocation) throws Exception  

即可。

样例代码:

[java]
view plaincopy

package cua.survey.interceptor;  
  
import java.util.Map;  
  
import com.opensymphony.xwork2.Action;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;  
  
public class LoginInterceptor extends MethodFilterInterceptor{  
  
    private static final long serialVersionUID = 1L;  
  
    protected String doIntercept(ActionInvocation action) throws Exception {  
        Map<String, Object> session = ActionContext.getContext().getSession();  
        String user = (String)session.get("user");  
        if(user != null && !"".equals(user)){  
            return action.invoke();  
        }else{  
            session.put("error", "your user or pwd is error, please login again...");  
            return Action.LOGIN;  
        }  
  
    }  
  
}  

实现之后拦截器属性excludeMethods、includeMethods就可以起到作用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐