源码:

自定义的拦截器类:

//自定义拦截器类: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中配置自定义拦截器放行多个方法的更多相关文章

  1. Struts2中一个自定义拦截器的使用

    1.自定义的拦截器的类: package it.web.interceptor; import com.opensymphony.xwork2.ActionContext; import com.op ...

  2. java中配置自定义拦截器中exclude-mapping path是什么意思?

    <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/>//过滤全部请求 & ...

  3. 使用struts2中默认的拦截器以及自定义拦截器

    转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...

  4. JavaEE开发之SpringMVC中的自定义拦截器及异常处理

    上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...

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

    struts框架中也存在拦截器,只不过系统自动调用.框架自带的拦截器的配置文件所在的位置为: java Resources--->Libraries--->struts2-core-2.3 ...

  6. 2018.12.17 struts.xml 配置自定义拦截器配置

    自定义拦截器有三个步骤哦 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PU ...

  7. 整合spring之后,struts2里面的自定义拦截器的invocation.invoke()总是返回input

    这个真的是整死我了,还好看见了一篇博客提示了我, 解决方法: 在spring的bean配置中我没有设置action的作用域为prototype,也就是多例的,如果不设置则就会是默认的singleton ...

  8. SpringBoot中设置自定义拦截器

    SpringBoot中设置自动以拦截器需要写一个类继承HandlerInterceptorAdapter并重写preHandle方法 例子 public class AuthorityIntercep ...

  9. Struts2中过滤器和拦截器的区别

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

随机推荐

  1. INSPIRED启示录 读书笔记 - 第33章 新瓶装老酒

    精明的公司至少要手握两件“法宝” 1.对目标市场了如指掌,对现有产品的缺陷洞若观火 2.跟踪最亲的技术趋势.新技术层出不穷,让之前无法实现的方案变得可能

  2. Python 列表List的定义及操作

    # 列表概念:有序的可变的元素集合 # 定义 # 直接定义 nums = [1,2,3,4,5] # 通过range函数构造,python2 和python3 版本之间的差异: # python3 用 ...

  3. 派派和京东的paipai域名之争

    最近有一款叫“派派”的APP很火,微博上.电梯里.群里到处都是推广广告.不仅如此,还有大张伟.关晓彤.王祖蓝等十几个明星发帖为“派派”站台.有消息称,派派这段时间仅线上推广就花去了约1600万. 总融 ...

  4. JavaScript -- 练习,Dom 获取节点

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Qt QThread 线程创建,线程同步,线程通信 实例

    1.  继承QThread, 实现run()方法, 即可创建线程. 2. 实例1 代码 myThread.h #ifndef MYTHREAD_H #define MYTHREAD_H #includ ...

  6. 使用struts碰到的错误

    这种错误更有可能url中路径写错了. 而这种情况更有可能使struts.xml写错了.特别要注意action的属性值class的编写是否正确.

  7. JavaScript 获取输入时的光标位置及场景问题

    前言 在输入编辑的业务场景中,可能会需要在光标当前的位置或附近显示提示选项.比如社交评论中的@user功能,要确保提示的用户列表总是出现在@字符右下方,又或者是在自定义编辑器中 autocomplet ...

  8. shell 学习之脚本编写1

    脚本要求: 执行脚本后 接受输入1,显示当前时间,并提示是否继续选择. 接受输入2,显示CPU负载,并提示是否继续选择.  接受输入3,显示剩余内存,并提示是否继续选择. 接受输入0,退出脚本. ·· ...

  9. node-并发控制

    当我们在做一些爬虫小程序的时候,如果我们一次性爬的数据条较多,那么相关软件也许会有限制或者是认为我们是非法的.那么我们就需要一些机制去限制获取数据的条数.而且node为我们提供的并发获取数据都是异步的 ...

  10. Deep Learning(Ian Goodfellow) — Chapter2 Linear Algebra

    线性代数是机器学习的数学基础之一,这里总结一下深度学习花书线性代数一章中机器学习主要用到的知识,并不囊括所有线性代数知识. 2.1 基础概念 Scalars: 一个数: Vctors: 一列数: Ma ...