国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Struts 2攔截器的研究與應(yīng)用

2019-06-20 01:22甘文麗
科技視界 2019年11期
關(guān)鍵詞:攔截器過(guò)濾器

甘文麗

【摘 要】介紹了Struts 2框架攔截器的設(shè)計(jì)思想和工作原理,并以軟件系統(tǒng)常見(jiàn)的權(quán)限控制功能為例,詳細(xì)說(shuō)明了攔截器在基于Java EE 平臺(tái)的Web應(yīng)用系統(tǒng)中的設(shè)計(jì)及配置。攔截器在Web開(kāi)發(fā)中的應(yīng)用,提高了系統(tǒng)代碼的可復(fù)用性、可擴(kuò)展性及靈活性。

【關(guān)鍵詞】攔截器;過(guò)濾器;Java EE;權(quán)限控制

中圖分類(lèi)號(hào): TP311 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2019)11-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 on Java EE platform,the application of the interceptor in Web development,improve code reusability, scalability and flexibility.

【Key words】Interceptor;Filter;Java EE;Permission control

0 前言

目前,在Web應(yīng)用軟件開(kāi)發(fā)中,經(jīng)常要用到一些公共服務(wù)如用戶認(rèn)證、權(quán)限檢查、日志管理、安全檢測(cè)、統(tǒng)計(jì)應(yīng)用的訪問(wèn)量、實(shí)現(xiàn)數(shù)據(jù)壓縮等,如果能將這些服務(wù)和軟件的主要業(yè)務(wù)邏輯模塊恰當(dāng)?shù)亟M合在一起,將提高代碼的可復(fù)用性、可擴(kuò)展性及靈活性[1-3]。AOP(Aspect-Oriented Programming)面向切面的編程利用橫切技術(shù)將與業(yè)務(wù)無(wú)關(guān)的公共模塊同邏輯模塊分離,攔截器是AOP的一種實(shí)現(xiàn)策略,以動(dòng)態(tài)的“可插拔”的方式解決了上述問(wèn)題。文章詳細(xì)分析了攔截器的設(shè)計(jì)思想和工作原理,并以權(quán)限控制為例,詳細(xì)說(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)置攔截器不能滿足要求時(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ā)中,經(jīng)常需要在Action執(zhí)行前同時(shí)執(zhí)行多個(gè)攔截動(dòng)作,如:用戶登錄檢查、登錄日志記錄以及權(quán)限檢查等,這時(shí),可以把多個(gè)攔截器組成一個(gè)攔截器棧。所謂的攔截器棧是指對(duì)應(yīng)各個(gè)功能的攔截器按照一定的順序排列形成的鏈,在使用時(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í)行流程就變?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ān)的通用功能需要開(kāi)發(fā)人員自定義攔截器實(shí)現(xiàn)。比如Web應(yīng)用軟件都要涉及到權(quán)限控制這部分,當(dāng)用戶訪問(wèn)系統(tǒng)的受保護(hù)資源時(shí),需要先檢查用戶是否已經(jīng)登錄,以及是否有權(quán)限訪問(wèn),可以由攔截器截獲用戶請(qǐng)求,判斷用戶是否已經(jīng)登錄。

2.1 自定義攔截器

如果需要自定義攔截器類(lèi),該類(lèi)就需要實(shí)現(xiàn)Interceptor接口。這個(gè)接口提供了攔截器的生命周期方法:(1)init()方法在攔截器被創(chuàng)建后調(diào)用,對(duì)系統(tǒng)相關(guān)資源進(jìn)行必要的初始化工作。(2)destroy()方法在攔截器對(duì)象被銷(xiāo)毀之前調(diào)用,用來(lái)釋放和攔截器相關(guān)的資源。(3)intercept(ActionInvocation 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í)現(xiàn)權(quán)限控制攔截器

判斷用戶是否登錄,可以跟蹤用戶的會(huì)話對(duì)象session來(lái)完成,利用ActionContext對(duì)象就可以可訪問(wèn)到session中的屬性,攔截器執(zhí)行攔截的intercepte方法的invocation參數(shù)可以得到ActionContext對(duì)象,通過(guò)ActionInvocation參數(shù)取得用戶的session實(shí)例的引用,從而判斷是否需要轉(zhuǎn)入登錄頁(yè)面。權(quán)限控制攔截器類(lèi)intercepte方法的關(guān)鍵代碼如下:

如果用戶登錄了,就把登錄時(shí)輸入的用戶名保存在session對(duì)象的username屬性中,通過(guò)ActionContext對(duì)象獲得session,然后檢查session中是否存在username屬性,這樣就可以判斷用戶登錄與否。如果用戶已經(jīng)登錄,程序就通過(guò)invocation.invoke()去執(zhí)行下一攔截器或者控制器。如果檢查到用戶未登錄,那么就會(huì)返回登錄界面的邏輯視圖。

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中引用攔截器,控制器封裝了用戶發(fā)出的增刪改查請(qǐng)求的方法,用戶發(fā)出的請(qǐng)求都首先被攔截器棧中的攔截器攔截,檢查用戶是否登錄,以及是否有足夠的權(quán)限來(lái)執(zhí)行該操作,如果沒(méi)有登錄,則向用戶顯示登錄頁(yè)面,如果用戶已經(jīng)登錄,則把請(qǐng)求傳遞給控制器相應(yīng)的處理請(qǐng)求的方法,最后給用戶返回響應(yīng)。

3 結(jié)束語(yǔ)

攔截器是Struts 2的核心組成部分,它提供了一種可以提取Action中可重復(fù)執(zhí)行部分的方式,本文介紹了攔截器的設(shè)計(jì)思想和工作原理,并以軟件系統(tǒng)常見(jiàn)的權(quán)限控制為例,詳細(xì)說(shuō)明了自定義攔截器的設(shè)計(jì)及配置, Web開(kāi)發(fā)人員靈活運(yùn)用攔截器技術(shù)可以顯著提高系統(tǒng)代碼的可重用性、可擴(kuò)展性和靈活性。

【參考文獻(xiàn)】

[1]趙春亮,張建國(guó),孟晨,等.基于Struts2攔截器的日志記錄的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2011,2:150-153.

[2]趙秀霞,付秀麗.基于組件和攔截器的Web系統(tǒng)權(quán)限設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2014,8:105-107.

[3]楊樹(shù)林,胡潔萍.使用Annotation和攔截器實(shí)現(xiàn)訪問(wèn)控制[J].北京印刷學(xué)院學(xué)報(bào),2010,2:52-54.

[4]鄭阿奇.Java EE實(shí)用教程[M].北京:電子工業(yè)出版社,2015.102-103.作者簡(jiǎn)介:甘文麗(1979—),女,河北邢臺(tái)人,副教授,研究方向?yàn)檐浖こ獭?shù)據(jù)挖掘。

猜你喜歡
攔截器過(guò)濾器
多動(dòng)能攔截器協(xié)同制導(dǎo)規(guī)律的研究及仿真
英國(guó)MARSS公司推出新型反無(wú)人機(jī)攔截器
支持過(guò)濾器的REST模型研究與實(shí)現(xiàn)
聲音過(guò)濾器
基于LOGO!的空氣過(guò)濾器自潔控制系統(tǒng)
HVM膜過(guò)濾器管板改造總結(jié)
基于AOP理念的Struts2攔截器的研究與應(yīng)用