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

来源:互联网 发布:北京美特软件 编辑:程序博客网 时间:2024/06/05 08:35

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

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

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;    }

只需要实现该类中的
protected abstract String doIntercept(ActionInvocation invocation) throws Exception
即可。


样例代码:

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就可以起到作用了。



原创粉丝点击