要自定義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類。