溫立輝
摘 要:針對程序設(shè)計過程中攔截機制的應(yīng)用問題,討論了攔截機制的實現(xiàn)原理,闡述攔截機制的適用場景;同時重點分析Java語言中的二種實現(xiàn)方式,并對比二種方式各自的優(yōu)缺點,最后指出了攔截機制的重要作用。
關(guān)鍵詞:攔截;過濾器;AOP代理;映射
攔截機制在各種面向?qū)ο缶幊陶Z言中均有極其重要的位置,不同語言中的實現(xiàn)方式有所不同,即使在同一語言中也有多種實現(xiàn)方式。Java語言中的攔截機制可以通過過濾器、Struts框架攔截器、Spring框架AOP代理等方式去進行實現(xiàn)。
1 攔截機制原理分析
攔截組件是一個服務(wù)器端的構(gòu)件,它可以截取客戶端的請求與響應(yīng)信息,以便查閱、提取或操作客戶機和服務(wù)器之間正在交換的數(shù)據(jù),其原理如圖1所示。首先,各種形式的客戶端向應(yīng)用服務(wù)發(fā)送請求;其次,各種請求在到達真正目標服務(wù)前會被攔截組件所截獲,并交由請求攔截方法處理,處理完畢后放行,請求才能到達真正的目標;第三,目標服務(wù)業(yè)務(wù)邏輯處理完成后,向客戶端發(fā)送響應(yīng)結(jié)果;第四,目標服務(wù)返回的影響結(jié)果同樣會被攔截組件所截獲,并交由響應(yīng)攔截方法處理,處理完畢才真正返回到客戶端。
攔截機制主要應(yīng)用于以下場景:1)日志模塊:通過攔截用戶的每一個操作,可記錄其行為特征及操作過程,以便于將來的審計、檢查、核對;2)權(quán)限模塊:通過截獲用戶的每一個請求,檢查其合法性,是否擁有所請求的數(shù)據(jù)資源或權(quán)限資源,以對請求對行權(quán)限控制;3)資源管理模塊:通過統(tǒng)一攔截控制進行資源初始化或釋放及相關(guān)管理工作,如用戶退出系統(tǒng)時進行公共攔截并釋放相關(guān)資源;4)事務(wù)模塊:在請求到達目標對象前截獲并開啟一個相關(guān)事務(wù),在請求結(jié)束后,同樣截獲響應(yīng)并提交或回滾事務(wù),從而達到事務(wù)管理的目的。
2 Java的實現(xiàn)方式
Java編程語言中,攔截機制的實現(xiàn)方式多種多樣,在各種不同的應(yīng)用框架中都有自己的一套相應(yīng)機制,下面主要對二種常見的、基本的實現(xiàn)方式進行分析、論述。
2.1 Servlet過濾器定義
過濾器(Filter)是Java攔截中最普通的一種實現(xiàn)方式,是SUN公司于2000年在Servlet2.3中新增加的功能,此種攔截方式適合于所有沒有特殊要求web的應(yīng)用系統(tǒng)中。
在Filter接口中有三個抽象方法:init方法在容器啟動時被調(diào)用,負責資源初始化;doFilter方法是請求的攔截方法,負責請求數(shù)據(jù)合法性的檢查;destroy方法在容器關(guān)閉時調(diào)用,負責資源的銷毀、釋放。自定義類需實現(xiàn)Filter接口,并在工程web.xml映射文件中配置好相應(yīng)攔截。配置代碼如下所示:
<!--攔截器定義 -->
<!--自定義攔截類 -->
<!--攔截規(guī)則定義 -->
<!--表示攔截所有請求 -->
2.2 Strust框架自定義攔截器
攔截器是Struts2框架的核心,攔截器可以讓程序員在Action類被執(zhí)行的前后嵌入相關(guān)的業(yè)務(wù)代碼。Struts2攔截器的實現(xiàn)相對簡單,請求到達Struts2的中央處理器FilterDispatcher時,會讀取struts.xml配置文件中的攔截器配置,然后實例化相關(guān)對象,并按一定的規(guī)則順序進行調(diào)用,此種攔截方式適合于用Struts框架構(gòu)建的應(yīng)用系統(tǒng)中。
自定義攔截類需實現(xiàn)Interceptor接口,接口有同樣有:init、destory、intercept三個方法。請求到達Action的前后均會被intercept截獲,通過參數(shù)ActionInvocation可取得對應(yīng)的Action實例,并通過參數(shù)的實例對象中的invoke方法可以控制請求的流向。其相關(guān)配置如下代碼所示:
<!-- 攔截器的定義 -->
<!-- 自定義攔截類 -->
<!-- 攔截器在Action中的引用 -->
3 結(jié)語
攔截機制是Java語言的一個重要功能特征,其有助于提升面向橫截面編程的能力,增強系統(tǒng)的健壯性,同時Java語言中存在多種不同的攔截實現(xiàn)方式,各自適應(yīng)不同的應(yīng)用場景,攔截機制如果應(yīng)用不當導(dǎo)致性能低下、效率不佳等問題,因而不能濫用。
參考文獻:
[1] 陽瑞發(fā).基于攔截器的Web服務(wù)會話技術(shù)研究[J].制造業(yè)自動化,2015,37(20):54-55.
[2] 董慧慧.基于struts2攔截器的操作日志系統(tǒng)設(shè)計[J].計算機光盤軟件與應(yīng)用,2012(4):141-142.
[3] 王濤濤,李曉禹,施煒利.Struts2攔截器控制頁面訪問權(quán)限的設(shè)計與實現(xiàn)[J].計算機與現(xiàn)代化,2009(1):32-33,37.