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

在struts2中配置自定义拦截器放行多个方法

2017-07-27 23:46 573 查看
在struts2中配置自定义拦截器放行多个方法

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

要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。

MethodFilterInterceptor类是AbstractInterceptor的子类

源码:

自定义的拦截器类:

//自定义拦截器类:LoginInterceptor ;

package com.java.action.interceptor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class LoginInterceptor extends MethodFilterInterceptor {

private static final long serialVersionUID = -5315714306081057062L;

 @Override

  protected String doIntercept(ActionInvocation invocation) throws Exception {

    //Logger log = LoggerFactory.getLogger(getClass());

    HttpSession session = ServletActionContext.getRequest().getSession();

    Object obj = session.getAttribute("boperator");

    if(null != obj ){

      return invocation.invoke();

     }else{

      //log.debug("Skipping Interceptor... Method [" + doIntercept(null) + "] found in exclude list.");

      return null;

    }

  }

}

在struts2.xml中配置:

 <!-- package标签下 -->

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

<!-- 自定义 拦截器 -->

<interceptors>

<interceptor name="login" class="com.java.action.interceptor.LoginInterceptor"></interceptor>

</interceptors>

<!-- package标签内容  标签尾 -->

<!-- action标签下 -->

<action name="hello_*" class="com.java.action.UserAction" method="{1}" >

<!-- 配置拦截器 -->

<interceptor-ref name="login">

<!-- param 标签下   name="excludeMethods"   放行多个方法   方法名1,方法名2  用逗号隔开即可  -->

<param name="excludeMethods">toLogin,login</param>

</interceptor-ref>

<!-- 由于使用了自定义拦截器,应再次加载使用框架默认拦截器 -->

<interceptor-ref name="defaultStack"></interceptor-ref>

<!-- action标签内容  标签尾 -->

原因--源码(部分):

protected Set<String> excludeMethods = Collections.emptySet();

protected Set<String> includeMethods = Collections.emptySet();

public void setExcludeMethods(String excludeMethods) {

  this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods);

}

public static Set<String> commaDelimitedStringToSet(String s) {

  Set<String> set = new HashSet<String>();

  String[] split = s.split(",");

  for (String aSplit : split) {

    String trimmed = aSplit.trim();

    if (trimmed.length() > 0)

    set.add(trimmed);

  }

  return set;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: