structs拦截器
来源:互联网 发布:java高级编程 jb51 编辑:程序博客网 时间:2024/05/16 20:28
Struts 2 methodfilterinterceptor--拦截方法的拦截器
在默认情况下,如果我们为某个Action定义了拦截器,则这个拦截器会拦截该Action内的所有方法。但有时我们不想拦截所有的方法,只需要拦截指定方法,此时就需要使用Struts 2拦截器的方法过滤特性。
为了实现方法过滤的特性,Struts 2提供了一个MethodFilterInterceptor类,该类是AbstractInterceptor类的子类,如果用户需要自己实现的拦截器支持方法过滤特性,则应该继承MethodFilterInterceptor。
MethodFilterInterceptor类重写了AbstractInterceptor类的intercept(ActionInvocation invocation)方法,但提供了一个doIntercept(ActionInvocation invocation)抽象方法。从这种设计方式可以看出,MethodFilterInterceptor类的intercept已经实现了对Action的拦截行为(只是实现了方法过滤的逻辑),但真正的拦截逻辑还需要开发者提供,也就是通过回调doIntercept方法实现。可见,如果用户需要实现自己的拦截逻辑,则应该重写doIntercept(ActionInvocation invocation)方法。
下面是一个简单的方法过滤的示例应用,方法过滤的拦截器代码如下。
//拦截方法的拦截器,应该继承MethodFilterInterceptor抽象类
public class MyFilterInterceptor
{
}
从上面的代码中可以看出,上面拦截器的拦截逻辑与前面简单拦截器的拦截逻辑相似,只是之前是需要重写intercept方法,现在是重写doIntercept方法。
实际上,实现方法过滤的拦截器与实现普通拦截器并没有太大的区别,只需要注意两个地方:实现方法过滤的拦截器需要继承MethodFilterInterceptor抽象类,并且重写doIntercept方法定义对Action的拦截逻辑。
在MethodFilterInterceptor方法中,额外增加了如下两个方法:
q
q
注意:如果一个方法同时在excludeMethods和includeMethods中列出,则该方法会被拦截。
因为MethodFilterInterceptor类包含了如上的两个方法,则该拦截器的子类也会获得这两个方法。可以在配置文件中指定需要被拦截,或者不需要被拦截的方法。
方法过滤示例应用的配置片段如下:
<!-- 配置本系统所使用的包 -->
<package name="lee" extends="struts-default">
</package>
上面配置文件的粗体字代码通过excludeMethods属性指定了execute方法无须被拦截,如果浏览者在浏览器中再次向login的Action发送请求,在Tomcat控制台将看不到任何输出,表明该拦截器没有拦截Action的execute方法。
如果需要同时指定多个方法不被该拦截器拦截,则多个方法之间以英文逗号(,)隔开。看如下的配置片段:
<interceptor-ref name="myfilter">
</interceptor-ref>
上面粗体字代码指定execute和haha方法都不会被myfilter拦截器拦截。
如果excludeMethods参数和includeMethods参数同时指定了一个方法名,则拦截器会拦截该方法。看如下的配置片段:
<interceptor-ref name="myfilter">
</interceptor-ref>
上面配置片段通过excludeMethods参数指定了execute和haha方法不需要被拦截,又通过includeMethods参数指定了execute方法需要拦截——二者冲突!以includeMethods参数指定的取胜,即拦截器会拦截execute方法。
Struts 2中提供了这种方法过滤的拦截器有如下几个:
q
q
q
q
- structs拦截器
- 使用structs 的拦截器记录操作日志系统
- structs
- structs
- structs
- Structs
- Structs
- Structs
- structs
- structs
- Structs
- 一个关于 Structs 校验器失效的故事
- [structs]用户指南!
- Structs examples
- 8.8 Structs
- 18. Structs
- structs articles
- Structs入门
- springmvc中的multipart使用
- 披露悠百佳休闲食品加盟骗局不要在上当受骗!
- 10.4-全栈Java笔记:常用流详解(二)
- angualr的$emit,$broadcast,$on
- 燕麦云何洋开讲丨从新iPad pro发现苹果移动办公布局玄机
- structs拦截器
- Hadoop1.2.1伪分布式部署遇到的一些问题
- 提高软件测试能力的建议
- spring mvc和struts2的区别
- Android 4.4 kitkat以上及以下根据uri获取路径的方法
- 很全的php数组操作方法
- 递推公式的特征方程及通项公式
- Oracle左连接、右连接、全外连接以及(+)号用法
- spring事务处理