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

Posted bloom_camellia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在struts2中配置自定义拦截器放行多个方法相关的知识,希望对你有一定的参考价值。

源码:

自定义的拦截器类:

//自定义拦截器类: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 ){
      //log.debug("Skipping Interceptor... Method [" + doIntercept(null) + "] found in exclude list.");
      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;
}

以上是关于在struts2中配置自定义拦截器放行多个方法的主要内容,如果未能解决你的问题,请参考以下文章

struts2入门之拦截器

SpringMVC自定义多个拦截器执行顺序

struts2框架之自定义拦截器和配置

struts2内置拦截器和自定义拦截器详解(附源码)

Struts2

struts2拦截器过滤放行后ajax请求后参数丢了