Struts2的攔截器是用來在請求處理前后進行一些額外的處理操作的,可以用于日志記錄、權限驗證、參數校驗等。
在Struts2中,可以通過繼承AbstractInterceptor
類來自定義攔截器。
以下是使用AbstractInterceptor
類的步驟:
AbstractInterceptor
類,并實現intercept
方法。public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 在請求處理前的處理邏輯
System.out.println("Before action execution");
// 執行下一個攔截器或Action
String result = invocation.invoke();
// 在請求處理后的處理邏輯
System.out.println("After action execution");
return result;
}
}
struts.xml
配置文件中配置攔截器。<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="com.example.MyInterceptor" />
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptorStack" />
<!-- 配置Action -->
</package>
</struts>
在上面的配置中,首先定義了一個名為myInterceptor
的攔截器,指定了對應的類名。然后定義了一個名為myInterceptorStack
的攔截器棧,該棧包含了前面定義的myInterceptor
和defaultStack
(默認的攔截器棧)。最后通過default-interceptor-ref
指定了默認使用的攔截器棧為myInterceptorStack
。
<struts>
<package name="default" extends="struts-default">
<interceptors>
<!-- ... -->
</interceptors>
<default-interceptor-ref name="myInterceptorStack" />
<!-- 引用攔截器 -->
<action name="myAction" class="com.example.MyAction">
<interceptor-ref name="myInterceptor" />
<!-- Action配置 -->
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
在上面的配置中,我們在myAction
配置中引用了名為myInterceptor
的攔截器。
這樣,在請求myAction
時,會先執行myInterceptor
攔截器的intercept
方法,然后再執行對應的Action方法。在Action方法執行完畢后,會再次執行myInterceptor
攔截器的intercept
方法。
注意:如果在攔截器的intercept
方法中調用了invocation.invoke()
方法,它會執行下一個攔截器或Action方法,如果沒有調用該方法,請求將不會繼續執行。