Struts2拦截器Interceptor的原理
什么是Interceptor
Interceptor拦截器,在Struts中负责拦截请求并且在Action处理请求之前或之后进行一系列的自定义操作,常用于日志记录、权限验证、性能监控等方面。
Interceptor的配置与执行
Interceptor的配置主要有两个步骤:
1.在struts.xml中进行声明;
2.在Action中指定使用的Interceptor。
当用户发起请求后,请求首先会进入Struts2框架中的核心类ActionInvocation中进行处理,在ActionInvocation的invoke方法中,会按照struts.xml中定义的配置顺序依次执行Interceptor,最后再进入Action中进行处理。
Interceptor有两种类型,分别是全局Interceptor和局部Interceptor:
- 全局Interceptor在struts.xml的
节点中定义,对整个应用程序的所有Action都生效; - 局部Interceptor在Action中通过@InterceptorRefs注解指定。
Interceptor的配置实例
下面给出两个Interceptor的配置实例,一个是全局Interceptor,另一个是局部Interceptor。
全局Interceptor实例
在struts.xml的
<interceptors>
<interceptor name="logInterceptor" class="com.example.LogInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="logInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
其中,LogInterceptor是自定义的拦截器类,实现了com.opensymphony.xwork2.interceptor.Interceptor接口。myStack是自定义的拦截器栈,其中包含了logInterceptor和defaultStack(Struts2默认的拦截器栈)。
在struts.xml中指定使用自定义的拦截器栈:
<default-interceptor-ref name="myStack"/>
这样,在所有的Action中都会按照自定义的拦截器栈配置进行拦截操作。
局部Interceptor实例
在Action中通过@InterceptorRefs注解指定使用的Interceptor:
@Namespace("/user")
@InterceptorRefs({@InterceptorRef("logInterceptor"), @InterceptorRef("defaultStack")})
public class UserAction extends ActionSupport {
// ...
}
其中,logInterceptor是自定义的拦截器类,实现了com.opensymphony.xwork2.interceptor.Interceptor接口,defaultStack是Struts2默认的拦截器栈。这样,只有UserAction这个Action会被配置的Interceptor拦截。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2拦截器Interceptor的原理与配置实例详解 - Python技术站