在實際的項目開發中,雖然 Struts2 的內建攔截器可以完成大部分的攔截任務,但是,一些與系統邏輯相關的通用功能(如權限的控制和用戶登錄控制等),則需要通過自定義攔截器實現。本節將詳細講解如何自定義攔截器。
在 Struts2 框架中,通常開發人員所編寫的自定義攔截器類都會直接或間接地實現 com.opensymphony.xwork2.interceptor.Interceptor 接口。Interceptor 接口中的主要代碼如下所示:
public interface Interceptor extends Serializable{ void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception;}
從上述代碼中可以看出,該接口共提供了以下三個方法。
1)void init() 該方法在攔截器被創建后會立即被調用,它在攔截器的生命周期內只被調用一次??梢栽谠摲椒ㄖ袑ο嚓P資源進行必要的初始化。
2)void destroy() 該方法與 init() 方法相對應,在攔截器實例被銷毀之前,將調用該方法釋放和攔截器相關的資源,它在攔截器的生命周期內,也只被調用一次。
3)String intercept(ActionInvocation invocation)throws Exception
該方法是攔截器的核心方法,用于添加真正執行攔截工作的代碼,實現具體的攔截操作,它返回一個字符串作為邏輯視圖,系統根據返回的字符串跳轉到對應的視圖資源。每攔截一個動作請求,該方法就會被調用一次。
該方法的 ActionInvocation 參數包含了被攔截的 Action 的引用,可以通過該參數的 invoke() 方法,將控制權轉給下一個攔截器或者轉給 Action 的 execute() 方法。
AbstractIntercepter 類實現了 Interceptor 接口,并且提供了 init() 方法和 destroy() 方法的空實現。使用時,可以直接繼承該抽象類,而不用實現那些不必要的方法。AbstractInterceptor 類中定義的方法如下所示:
public abstract class AbstractInterceptor implements Interceptor{ public void init(){ } public void destroy(){ } public abstract String intercept (ActionInvocation invocation) throws Exception;}
AbstractInterceptor 類已經實現了 Interceptor 接口的所有方法,一般情況下,只需繼承 AbstractInterceptor 類,實現 interceptor() 方法就可以創建自定義攔截器。
需要注意的是,只有當自定義的攔截器需要打開系統資源時,才需要覆蓋 AbstractInterceptor 類的 init() 方法和 destroy() 方法。與實現 Interceptor 接口相比,繼承 AbstractInterceptor 類的方法更為簡單。
MethodFilterInterceptor提供了一個doIntercept方法供我們實現攔截器功能。
public abstract class MethodFilterInterceptor extends AbstractInterceptor { /** * Subclasses must override to implement the interceptor logic. * * @param invocation the action invocation * @return the result of invocation * @throws Exception */ protected abstract String doIntercept(ActionInvocation invocation) throws Exception; }
示例:
import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;//繼承:MethodFilterInterceptor 方法過濾攔截器//功能: 定制攔截器攔截的方法.// 定制哪些方法需要攔截.// 定制哪些方法不需要攔截public class MyInterceptor3 extends MethodFilterInterceptor{ @Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception { //前處理System.out.println("MyInterceptor3 的前處理!");//放行String result = invocation.invoke();//后處理System.out.println("MyInterceptor3 的后處理!");return result;}}
146536.html
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
360搶票王還可以搶票嗎?30票搶票王還能用。你可以試試。30搶票提供自動識別驗證碼、預約提醒、自動刷票等功能。搶到火車票的成功率翻倍,幫你買一張回家的火車票??梢酝ㄟ^驗證碼自動識別,自動放票。不過我每次買票都是用12306APP,是官方的搶票軟件,不會有第三方費用。如何用360搶票王搶下鋪火車票?打開軟件后,點擊右上角的“類型”,選擇“下鋪火車票”。30搶票王是360推出的全新搶票工具。是在常用...
要流暢的看VR電腦配置,越高越好。目前VR主要針對要求高的顯卡(與成像相關)。目前很多VR廠商都為自己的VR軟件推薦了電腦配置,但是官網查??偟膩碚f只有幾個大項:四代以上,I5處理器8G,內存4G,顯卡,光學主機一般價格在5000以上??梢粤鲿呈褂肰R。根據目前VR的硬件形式,VR頭戴設備主要分為三種:1.移動終端顯示器(俗稱手機VR)移動終端顯示器(手機VR)——所謂的VR眼鏡盒,只要放在手機里...
蘋果怎樣添加軟件源?1. 越獄后第一次打開Cydia需要很長時間才能加載,等待設備重新啟動后再打開Cydia;2。打開Cydia后,單擊下面的“軟件源”;3。單擊右上角的“編輯添加”;4。在輸入框中輸入源地址。如果輸入ACE assistant的源地址:apt.so/I4工具輸入后,單擊添加源;5。將驗證URL,并在通過后自動安裝源代碼。等待完成后,點擊“返回Cydia”6。添加之后,您可以在軟件...