struts2中给我们提供了一个MethodFilterInterceptor类,该类是 AbstractInterceptor的子类,可以实现对Action方法的拦截
方法拦截器比action拦截器更加细粒度的控制,主体实现与action实现一致,但是方法拦截是继承MethodFilterInterceptor类,重写其doIntercept方法;
实现代码如下:
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
/**
*使用方法拦截器进行拦截
* @author agog
*
*/
public class ListInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("方法拦截器被执行");
return invocation.invoke();
}
}
struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" extends="struts-default" namespace="/">
<interceptors>
<!-- 配置拦截器 -->
<interceptor name="time" class="cn.xsx.interceptor.TimeInterceptor"></interceptor>
<interceptor name="loginInterceptor" class="cn.xsx.interceptor.LoginInterceptor"></interceptor>
<!-- 配置方法拦截器 -->
<interceptor name="methodInterceptor" class="cn.xsx.interceptor.ListInterceptor"></interceptor>
<!-- 定义自定义拦截器栈 (一个拦截器栈里可以包含多个拦截器引用)-->
<interceptor-stack name="znStack">
<!-- 引用方法拦截器 -->
<interceptor-ref name="methodInterceptor">
<!-- 设定参数 -->
<param name="includeMethods">list,add</param>
</interceptor-ref>
<!-- 引用拦截器 -->
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="time"></interceptor-ref>
<!-- 引用默认拦截器栈(引用拦截器栈与引用拦截器栈的方式一样) -->
<interceptor-ref name= "defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器(或者拦截器栈) -->
<default-interceptor-ref name="znStack">
</default-interceptor-ref>
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="hello" class="cn.xsx.action.HelloAction">
<result>/WEB-INF/index.jsp</result>
<!-- 引用自定义拦截器栈 -->
<!-- <interceptor-ref name="znStack"></interceptor-ref> -->
</action>
<action name="hello" class="cn.xsx.action.HelloAction">
<result>/WEB-INF/index.jsp</result>
<!-- 引用自定义拦截器栈 -->
<!-- <interceptor-ref name="znStack"></interceptor-ref> -->
</action>
<action name="list" class="cn.xsx.action.HelloAction" method="list">
<result>/WEB-INF/index.jsp</result>
</action>
<action name="add" class="cn.xsx.action.HelloAction" method="add">
<result>/WEB-INF/index.jsp</result>
</action>
<action name="login" class="cn.xsx.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
</struts>