999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Spring AOP的權限控制應用研究

2009-10-29 10:07:54林華靈
中國新技術新產品 2009年17期

林華靈

摘要:Spring AOP的面向切面編程的能力,解決了傳統面向對象程序設計(OOP)在權限控制應用中存在的問題。實現權限控制組件的模塊化,業務邏輯組件與權限控制組件的分離和解耦,從而提高組件及代碼的復用度。

關鍵詞:OOP;面向切面編程;Spring AOP;權限控制

1 引言

OOP(Object Oriented Programming,面向對象程序設計)中的每個對象均由屬性和方法封裝構成,是對客觀物質的抽象,對比傳統的面向結構程序設計思想,OOP思想更加接近于客觀世界,是當前最主流的編程思想。基于繼承、多態和封裝等特性的OOP在解決縱向多層次的對象關系問題,如繼承、聚合和泛化等,展示出強大能力。但運用OOP解決一些橫向關系的問題,如日志、權限控制、緩存和事務等問題,卻無法行之有效。因為此類問題跨越了給定編程模型中的傳統職責界限。如果使用面向對象技術程序設計(OOP)來解決這類問題 ,往往會使系統衍生大量冗余代碼,組件緊密耦合和可維護性差等問題。為了彌補面向對象編程技術解決“橫切”方面問題存在的能力不足, 面向切面編程(Aspect Oriented Programming ,簡稱AOP)技術便應運而生,它的出現有效解決了上述問題,并使系統設計開發變得簡單而高效 ,并從編程方法學的角度提供了一種編寫安全程序的有效途徑。

2 Spring框架技術與Spring AOP技術原理

SpringFramework是開源的J2EE應用框架。它的核心是個輕量級容器,Spring通過容器管理物件的生命周期、物件的組態、依賴注入等。旨在簡化J2EE的開發,降低J2EE項目實施的難度。Spring幫助實現了真正的邏輯層和Web層的分離。它是為解決企業應用開發的復雜性而創建的,Spring使用基本的JavaBeans也就是POJO便可以完成EJB完成的事情。Spring的主要設計目標是設計系統組件就有可重用性、易測試、簡單以及松散耦合等特性。

2.1 Spring框架體系結構

Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式[1]。

2.2 Spring IoC模式

當我們進行項目開發時,我們將一個復雜的系統進行有效的劃分,形成多個模塊,這樣可以使我們有效的理解和控制整個系統,使每個模塊都能易于理解和維護。但是模塊之間以某種方式進行信息交換的時候,模塊和模塊之間就不可避免的發生了某種耦合關系。但是,如果模塊間過強藕合則會對整個系統來說會造成很大的潛在危害,特別是當需求發生變化時,代碼維護的代價相當高。因此我們要盡可能的消解模塊間不必要的藕合,盡量提高系統的可維護性和組件的復用度。

Spring的核心是IoC(Inversion of Control,控制反轉),就是為了要解決組件間的耦合而產生的,實現組件的構建和使用分開。所謂“控制反轉”就是將原先系統中對象間關系的控制權從程序自身轉交給IoC容器。借助IoC能夠降低系統中各個組件之間的依賴關系,實現解降藕的目的。

Spring IoC主要通過依賴注入的方式實現對象控制的反轉。即在組件設計時,避免采用靜態編碼的形式描述組件間的相互依賴關系,而是在系統運行期間,由Spring IoC容器依據Spring 上下文的描述,動態地將目標對象實例注入到各個關聯組件中。

Spring AOP可以解決傳統面向對象編程(OOP)中不能夠很好解決的“橫切關注點”(CrossCut)方面的問題,例如,在應用開發中需要解決的安全、事務、日志等公共功能問題。盡管這些問題的解決與系統業務邏輯實現無關,但解決的好壞影響著系統的健壯和穩定,命運攸關系統開發的成敗。而以傳統方式解決“橫切關注點”問題,通常是將公共功能代碼散布并靜態嵌入到各個業務邏輯組件中,因此“橫切關注點”問題的解決代碼與業務邏輯組件緊密耦合。一旦需要對公共功能代碼做修改,必須逐個找出應用該代碼的業務邏輯組件,再逐一修改。而Spring AOP解決這些問題的方法首先是將業務邏輯方面的解決和“橫切關注點”方面問題的解決相分離;其次是將“橫切關注點”問題的解決實現集中化、模塊化處理。下面是關于Spring AOP的重要概念[1]:

切面(Aspect):一個關注點的模塊化,這個關注點可能會橫切多個對象。事務管理是J2EE應用中一個關于橫切關注點的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式來實現。

連接點(Joinpoint):在程序執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。

通知(Advice):在切面的某個特定的連接點上執行的動作。其中包括了“around”、“before”和“after”等不同類型的通知(通知的類型將在后面部分進行討論)。許多AOP框架(包括Spring)都是以攔截器做通知模型,并維護一個以連接點為中心的攔截器鏈。

切入點(Pointcut):匹配連接點的斷言。通知和一個切入點表達式關聯,并在滿足這個切入點的連接點上運行(例如,當執行某個特定名稱的方法時)。

織入(Weaving):把切面連接到其它的應用程序類型或者對象上,并創建一個被通知的對象。這些可以在編譯時(例如使用AspectJ編譯器),類加載時和運行時完成。Spring和其他純Java AOP框架一樣,在運行時完成織入。

因為SpringAOP解決“橫切”方面問題采用了動態代理的實現機制,把切面連接到切點上,并創建一個被通知的對象這個過程通常在編譯時,類加載時和運行時完成。而并非預先靜態嵌入代碼的方式,所以我們還需要在Advice(通知)執行的時機預先做好定義。在Spring AOP中,通知切面(Aspect)織入切點(Pointcut)的時機可分為:前置通知、后置通知、異常通知、最終通知和環繞通知。

3基于Spring AOP的權限控制組件實現

權限控制是企業級Web應用系統中不可或缺的功能之一,是Web系統運行的重要的安全保障。Spring AOP在Web系統的用戶權限控制方面具有強大的能力。以在線考試系統為例,系統包含了權限控制的實現,不同的用戶被授予不同的權限。例如考生的權限僅限于特定時間的考試和成績查詢,系統管理員的權限包含添加考生、刪除考生、增加試題等更高層次的操作。因此針對于某些較高權限的操作,我們可以在操作前先進行用戶的權限檢查。權限檢查通過,則用戶方可以繼續執行持久化操作。權限檢查與實際的業務邏輯無關,而屬于安全相關的“橫切”方面的問題。針對這個案例,我們給出了兩種解決方案:

解決方案一:我們在系統的業務邏輯組件中凡是涉及持久化實現的方法都插入權限檢查方法的代碼,使得當用戶進行任何方式的持久化操作之前,都先執行權限檢查方法;這是AOP提出之前,解決橫切問題的通常做法。但是采用這種大面積嵌入靜態代碼做法產生的問題是代碼冗余了,而且使業務邏輯組件對權限檢查組件的緊密耦合,不利于系統的擴展和升級。譬如,當需要對安全代碼作變更的時候,需要找出所有業務邏輯方法,手工一一加入權限控制代碼,采用這種方案效率低下,且不易維護。

解決方案二:采用AOP(面向切面編程)的解決方案,將散布在各個業務邏輯組件中權限控制代碼同業務邏輯代碼相分離,并實現權限控制代碼的模塊化、組件化處理。Spring AOP采用了動態代理的方式,避免了在所有切點上加入靜態的權限檢查代碼,因此解決了代碼重復的問題。

在線考試系統中業務邏輯組件ExamServiceImpl的用戶權限檢查就采用了Spring AOP實現。下面是以業務邏輯組件ExamServiceImpl為例,介紹Spring AOP思想在本應用系統中的實現。Spring上下文中的配置:

這段Spring上下文首先將權限檢查組件類AuthorityCheck和業務邏輯組件類ExamServiceImpl定義為Bean類,這樣當需要用到這兩個組件時候,Spring IoC容器便會向程序注入兩個類的實例,實現了控制反轉(IoC)。

定義了權限檢查組件(AuthorityCheck)為“切面”(aspect),由于上下中前面已聲明AuthorityCheck,因此我們將切面聲明標簽的name屬性改為ref指向AuthorityCheck 類;

聲明了切點(pointcut)為org.service.ExamServiceImpl類下的所有方法。

聲明了前置通知為checkSecurity方法,一旦追蹤并捕獲目標方法(ExamServiceImpl類下所有方法)即將被執行的消息,權限檢查方法(checkSecurity)先被調用執行。權限檢查通過,用戶方可實現執行ExamServiceImpl類下的添加考生、刪除考生、添加試題等所有方法。權限檢查失敗,拋出異常,提示用戶權限等級不夠,不能執行相關操作。

因此Spring AOP為解決“橫切”方面問題,提供了出色的方案。

結束語

Spring AOP建立在Spring IoC機制之上,Spring AOP的攔截(interception)能力,提供了“在所有對象的方法調用前/后加入自定義行為”的攔截能力。促使軟件開發人員對用戶權限控制等公共功能實現模塊化、組件化,從而消除了OOP引起的代碼冗余和混亂問題,增強了系統的可維護性和代碼的重用性,并最終實現系統的解降藕的目的。

參考文獻

[1]林信良.Spring技術手冊.北京:電子工業出版社,2006

[2]劉斌.Java Web整合開發[M].電子工業出版社,2007(11)

[3]劉昆.基于J2EE平臺的輕量級框架的應用研究[D]. 武漢理工大學,2008

[4]楊少波,顧益軍.J2EE項目實訓--Spring框架技術,2008(5)

[5]李剛.整合Struts+Hibernate+Spring應用開發詳解,2007(11)

主站蜘蛛池模板: 国产高清在线观看| 日韩小视频网站hq| 久久久久夜色精品波多野结衣 | 国产精品免费入口视频| 午夜综合网| 无码精品国产dvd在线观看9久| 亚洲人网站| 成人免费一级片| 久青草免费视频| 亚洲天堂777| 欧美区一区二区三| 一级毛片不卡片免费观看| 在线播放精品一区二区啪视频| 午夜激情婷婷| 天堂网亚洲综合在线| 国产毛片片精品天天看视频| 亚洲av片在线免费观看| 香蕉在线视频网站| 亚洲天堂网在线播放| 波多野结衣第一页| 亚洲精品日产AⅤ| 狼友av永久网站免费观看| 国产亚洲视频中文字幕视频| 性喷潮久久久久久久久| 色噜噜久久| 欧美a在线看| 永久免费AⅤ无码网站在线观看| 精品在线免费播放| 久久精品国产亚洲麻豆| 精品人妻无码中字系列| 中文字幕无码制服中字| 亚洲高清在线天堂精品| 福利姬国产精品一区在线| 欧美亚洲第一页| 91黄视频在线观看| 欧美天天干| 亚洲午夜福利精品无码| 99热国产这里只有精品无卡顿"| 日韩成人在线网站| 精品国产乱码久久久久久一区二区| AV片亚洲国产男人的天堂| 青青国产视频| 国产97视频在线观看| 免费国产小视频在线观看| 精品成人免费自拍视频| 国产91九色在线播放| 国产精品3p视频| 成人看片欧美一区二区| 欧美在线中文字幕| 亚洲人在线| 国产AV毛片| 国产成人三级| 国产成人综合亚洲网址| 国产欧美亚洲精品第3页在线| 97狠狠操| 美女潮喷出白浆在线观看视频| 午夜性刺激在线观看免费| 丁香亚洲综合五月天婷婷| 日本午夜精品一本在线观看 | 呦视频在线一区二区三区| 国产精品永久久久久| 无码丝袜人妻| 国产无码网站在线观看| 久久综合丝袜日本网| 青青草国产一区二区三区| 午夜福利在线观看成人| 亚洲欧洲天堂色AV| 日韩无码黄色| 99资源在线| 五月综合色婷婷| 亚洲精品va| 92午夜福利影院一区二区三区| 免费毛片视频| 久久一色本道亚洲| 久久精品人人做人人爽97| 99久久精品免费观看国产| 欧美精品一二三区| 欧美日韩综合网| 亚洲精品中文字幕午夜| 一级片免费网站| 欧美日本激情| 99久久精品国产精品亚洲|