要自定义Struts2拦截器,您需要按照以下步骤进行操作:
com.opensymphony.xwork2.interceptor.Interceptor
接口的类,例如 CustomInterceptor
。public class CustomInterceptor implements Interceptor {
@Override
public void destroy() {
// 在拦截器销毁时执行的代码
}
@Override
public void init() {
// 在拦截器初始化时执行的代码
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 在拦截器拦截请求时执行的代码
// 您可以在这里实现自定义的逻辑
// 调用下一个拦截器或者执行Action
String result = invocation.invoke();
// 在拦截器拦截请求完成后执行的代码
return result;
}
}
struts.xml
配置文件中添加拦截器的定义和使用。<struts>
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="customInterceptor" class="com.example.CustomInterceptor" />
</interceptors>
<!-- 使用拦截器 -->
<action name="exampleAction" class="com.example.ExampleAction">
<interceptor-ref name="customInterceptor" />
<result>/example.jsp</result>
</action>
</struts>
在上述配置中,<interceptor>
元素定义了一个名为 customInterceptor
的拦截器,并指定了实现该拦截器的类。然后,在 <action>
元素中使用 <interceptor-ref>
元素引用了拦截器。
这样,在执行名为 exampleAction
的Action时,会先执行 customInterceptor
拦截器的 intercept
方法,然后再执行Action的逻辑。
注意:为了让Struts2能够扫描到您自定义的拦截器类,需要在 struts.xml
配置文件中添加相应的包扫描配置。例如:
<struts>
<!-- 配置包扫描 -->
<package name="com.example" extends="struts-default">
<action name="exampleAction" class="com.example.ExampleAction">
<interceptor-ref name="customInterceptor" />
<result>/example.jsp</result>
</action>
</package>
</struts>
在上述配置中,<package>
元素指定了包名为 com.example
的包,并通过 extends="struts-default"
继承了默认的Struts2包。这样,Struts2会自动扫描该包下的Action和Interceptor类。