Struts 2攔截器的研究與應(yīng)用_第1頁(yè)
Struts 2攔截器的研究與應(yīng)用_第2頁(yè)
Struts 2攔截器的研究與應(yīng)用_第3頁(yè)
Struts 2攔截器的研究與應(yīng)用_第4頁(yè)
Struts 2攔截器的研究與應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Struts 2攔截器的研究與應(yīng)用Struts 2攔截器的討論與應(yīng)用2457202111-0031-002【Abstract】Introduces the design idea and working principle of the Struts 2 framework interceptor,and take the software system as an example,A detailed description of the interceptor in the design and configuration of Web application system based o

2、n Java EE platform,the application of the interceptor in Web development,improve code reusability, scalability and flexibility.【Key words】Interceptor;Filter;Java EE;Permission control0 前言目前,在Web應(yīng)用軟件開(kāi)發(fā)中,常常要用到一些公共服務(wù)如用戶(hù)認(rèn)證、權(quán)限檢查、日志治理、安全檢測(cè)、統(tǒng)計(jì)應(yīng)用的訪問(wèn)量、實(shí)現(xiàn)數(shù)據(jù)壓縮等,假如能將這些服務(wù)和軟件的主要業(yè)務(wù)規(guī)律模塊恰當(dāng)?shù)亟M合在一起,將提高代碼的可復(fù)用性、可擴(kuò)展性及敏捷性1

3、-3。AOPAspect-Oriented Programming面向切面的編程利用橫切技術(shù)將與業(yè)務(wù)無(wú)關(guān)的公共模塊同規(guī)律模塊分別,攔截器是AOP的一種實(shí)現(xiàn)策略,以動(dòng)態(tài)的“可插拔的方式解決了上述問(wèn)題。文章具體分析了攔截器的設(shè)計(jì)思想和工作原理,并以權(quán)限操縱為例,具體說(shuō)明了攔截器的設(shè)計(jì)及配置,為Web開(kāi)發(fā)人員敏捷運(yùn)用攔截器技術(shù)提供了借鑒。1 攔截器1.1 概述Struts 2是一個(gè)基于MVC設(shè)計(jì)模式的開(kāi)源框架,它的許多核心功能都借助于攔截器實(shí)現(xiàn),如封裝請(qǐng)求參數(shù)、數(shù)據(jù)校驗(yàn)、類(lèi)型轉(zhuǎn)換、文件上傳、防止表單的重復(fù)提交等。在實(shí)際項(xiàng)目開(kāi)發(fā)中,利用Struts 2的內(nèi)置攔截器就可以完成許多操作,當(dāng)內(nèi)置攔截器不能滿(mǎn)

4、足要求時(shí),開(kāi)發(fā)人員可以自定義攔截器進(jìn)行擴(kuò)展。在訪問(wèn)Struts 2操縱器Action的方法之前或之后,攔截器可以進(jìn)行攔截,加入某些操作,完成特定的功能4。攔截器同時(shí)也提供了一種可以提取Action中可重復(fù)執(zhí)行部分的方式,通過(guò)把重復(fù)的代碼提取到攔截器類(lèi)中,從而實(shí)現(xiàn)更好的代碼復(fù)用性。攔截器實(shí)現(xiàn)了AOP技術(shù),并且是可插拔的,當(dāng)需要為Action添加功能的時(shí)候就配置該攔截器,當(dāng)為Action削減功能的時(shí)候就取消配置攔截器,具有很好的可擴(kuò)展性。1.2 工作原理Struts 2中將各個(gè)功能對(duì)應(yīng)的攔截器分開(kāi)定義,每個(gè)攔截器完成單個(gè)功能,假如需要對(duì)Action運(yùn)用某個(gè)功能就引用對(duì)應(yīng)的攔截器。在實(shí)際開(kāi)發(fā)中,常常

5、需要在Action執(zhí)行前同時(shí)執(zhí)行多個(gè)攔截動(dòng)作,如:用戶(hù)登錄檢查、登錄日志記錄以及權(quán)限檢查等,這時(shí),可以把多個(gè)攔截器組成一個(gè)攔截器棧。所謂的攔截器棧是指對(duì)應(yīng)各個(gè)功能的攔截器根據(jù)肯定的順序排列形成的鏈,在使用時(shí),可以將棧內(nèi)的多個(gè)攔截器當(dāng)成一個(gè)整體來(lái)引用。當(dāng)攔截器棧被附加到一個(gè)Action上時(shí),在執(zhí)行Action之前必需先執(zhí)行攔截器棧中的每一個(gè)攔截器。通常狀況下,攔截器都是以代理方式調(diào)用的。Struts 2攔截器在Action執(zhí)行前后進(jìn)行攔截,圍繞著Action的執(zhí)行而執(zhí)行,比方實(shí)現(xiàn)日志治理攔截器和安全功能的攔截器,在系統(tǒng)的Action關(guān)聯(lián)了攔截器,添加到Action執(zhí)行過(guò)程中以后,系統(tǒng)的整個(gè)執(zhí)行流

6、程就變?yōu)椋河涗浫罩尽?zhí)行安全檢測(cè)、執(zhí)行Action、執(zhí)行安全檢測(cè)、記錄日志,在執(zhí)行的過(guò)程中,每一個(gè)攔截器類(lèi)的攔截方法確定是傳遞請(qǐng)求,還是終止請(qǐng)求。2 權(quán)限操縱攔截器的設(shè)計(jì)與實(shí)現(xiàn)在實(shí)際的Web應(yīng)用軟件項(xiàng)目中,與項(xiàng)目的業(yè)務(wù)規(guī)律相關(guān)的通用功能需要開(kāi)發(fā)人員自定義攔截器實(shí)現(xiàn)。比方Web應(yīng)用軟件都要涉及到權(quán)限操縱這部分,當(dāng)用戶(hù)訪問(wèn)系統(tǒng)的受愛(ài)護(hù)資源時(shí),需要先檢查用戶(hù)是否已經(jīng)登錄,以及是否有權(quán)限訪問(wèn),可以由攔截器截獲用戶(hù)請(qǐng)求,推斷用戶(hù)是否已經(jīng)登錄。2.1 自定義攔截器假如需要自定義攔截器類(lèi),該類(lèi)就需要實(shí)現(xiàn)Interceptor接口。這個(gè)接口提供了攔截器的生命周期方法:1init方法在攔截器被創(chuàng)建后調(diào)用,對(duì)系統(tǒng)

7、相關(guān)資源進(jìn)行必要的初始化工作。2destroy方法在攔截器對(duì)象被銷(xiāo)毀之前調(diào)用,用來(lái)釋放和攔截器相關(guān)的資源。3interceptActionInvocation invocation方法是攔截器的核心方法,用來(lái)實(shí)現(xiàn)具體的攔截操作,可以通過(guò)ActionInvocation參數(shù)的invoke方法,將操縱權(quán)轉(zhuǎn)給下一個(gè)攔截器或者操縱器Action。假如需要自定義攔截器類(lèi),只需要實(shí)現(xiàn)Interceptor接口的三個(gè)方法即可。然而在實(shí)際開(kāi)發(fā)過(guò)程中,更常用的一種方式是繼承抽象攔截器類(lèi)AbstractIntercepter,它實(shí)現(xiàn)了Interceptor接口,因此可以直接繼承該抽象類(lèi),簡(jiǎn)化代碼的編寫(xiě)。2.2 實(shí)

8、現(xiàn)權(quán)限操縱攔截器推斷用戶(hù)是否登錄,可以跟蹤用戶(hù)的會(huì)話對(duì)象session來(lái)完成,利用ActionContext對(duì)象就可以可訪問(wèn)到session中的屬性,攔截器執(zhí)行攔截的intercepte方法的invocation參數(shù)可以得到ActionContext對(duì)象,通過(guò)ActionInvocation參數(shù)取得用戶(hù)的session實(shí)例的引用,從而推斷是否需要轉(zhuǎn)入登錄頁(yè)面。權(quán)限操縱攔截器類(lèi)intercepte方法的關(guān)鍵代碼如下: 假如用戶(hù)登錄了,就把登錄時(shí)輸入的用戶(hù)名保存在session對(duì)象的username屬性中,通過(guò)ActionContext對(duì)象獲得session,然后檢查session中是否存在use

9、rname屬性,這樣就可以推斷用戶(hù)登錄與否。假如用戶(hù)已經(jīng)登錄,程序就通過(guò)invocation.invoke去執(zhí)行下一攔截器或者操縱器。假如檢查到用戶(hù)未登錄,那么就會(huì)返回登錄界面的規(guī)律視圖。2.3 配置權(quán)限操縱攔截器假如要使用權(quán)限操縱攔截器,還要在項(xiàng)目的配置文件struts.xml中定義該攔截器。由于Struts2中許多核心功能都是由系統(tǒng)默認(rèn)的defaultStack中的攔截器實(shí)現(xiàn)的,所以開(kāi)發(fā)人員自定義的攔截器需要引用系統(tǒng)默認(rèn)的defaultStack,這樣Web應(yīng)用才可以使用Struts 2框架提供的眾多功能。接下來(lái)可以在系統(tǒng)的操縱器Action中引用攔截器,操縱器封裝了用戶(hù)發(fā)出的增刪改查請(qǐng)求的方法,用戶(hù)發(fā)出的請(qǐng)求都首先被攔截器棧中的攔截器攔截,檢查用戶(hù)是否登錄,以及是否有足夠的權(quán)限來(lái)執(zhí)行該操作,假如沒(méi)有登錄,則向用戶(hù)顯示登錄頁(yè)面,假如用戶(hù)已經(jīng)登錄,則把請(qǐng)求傳遞給操縱器相應(yīng)的處理請(qǐng)求的方法,最終給用戶(hù)返回響應(yīng)。3 結(jié)束語(yǔ)攔

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論