众所周知,我们在使用Struts2进行项目开发的时候,如果为某个Action配置拦截器,那么这个拦截器就会拦截该Action内的所有方法。但是在有些情况下,我们不需要拦截所有的方法,只想拦截指定的方法,此时就需要用到Struts2拦截器的方法过滤的特性了。
为了实现方法过滤的特性,Struts2提供了一个MethodFilterInterceptor类,该类是AbstractInterceptor类的子类,如果想要自己实现的拦截器支持方法过滤特性,那就要继承MethodFilterInterceptor。
MethodFilterInterceptor类重写了AbstractInterceptor类的intercept方法,但是提供了一个doIntercept抽象方法。从这种设计方法可以看出,MethodFilterInterceptor类的intercept已经实现了对Action的拦截行为,但是真正的拦截逻辑还需要开发者自己来写,也就是通过回调dointercept方法实现。可见,如果我们想要实现自己的拦截逻辑,则应该重写doIntercept方法。
下面我们通过一个简单的方法过滤示例,来展示如何实现方法过滤,具体代码如下:
// 拦截方法的拦截器,应该继承MethodFilterInterceptor抽象类
public class MyFilterInterceptor
extends Me