亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring AOP的權(quán)限控制應用研究

        2009-10-29 10:07:54林華靈
        中國新技術(shù)新產(chǎn)品 2009年17期

        林華靈

        摘要:Spring AOP的面向切面編程的能力,解決了傳統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(OOP)在權(quán)限控制應用中存在的問題。實現(xiàn)權(quán)限控制組件的模塊化,業(yè)務(wù)邏輯組件與權(quán)限控制組件的分離和解耦,從而提高組件及代碼的復用度。

        關(guān)鍵詞:OOP;面向切面編程;Spring AOP;權(quán)限控制

        1 引言

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

        2 Spring框架技術(shù)與Spring AOP技術(shù)原理

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

        2.1 Spring框架體系結(jié)構(gòu)

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

        2.2 Spring IoC模式

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

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

        Spring IoC主要通過依賴注入的方式實現(xiàn)對象控制的反轉(zhuǎn)。即在組件設(shè)計時,避免采用靜態(tài)編碼的形式描述組件間的相互依賴關(guān)系,而是在系統(tǒng)運行期間,由Spring IoC容器依據(jù)Spring 上下文的描述,動態(tài)地將目標對象實例注入到各個關(guān)聯(lián)組件中。

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

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

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

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

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

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

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

        3基于Spring AOP的權(quán)限控制組件實現(xiàn)

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

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

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

        在線考試系統(tǒng)中業(yè)務(wù)邏輯組件ExamServiceImpl的用戶權(quán)限檢查就采用了Spring AOP實現(xiàn)。下面是以業(yè)務(wù)邏輯組件ExamServiceImpl為例,介紹Spring AOP思想在本應用系統(tǒng)中的實現(xiàn)。Spring上下文中的配置:

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

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

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

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

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

        結(jié)束語

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

        參考文獻

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

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

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

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

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

        亚洲成a人片在线观看中文!!!| 亚洲中文字幕国产剧情| av天堂手机一区在线| 亚洲av色香蕉一区二区三区软件 | 国内精品视频一区二区三区| 国产人成精品综合欧美成人| 99在线无码精品秘 入口九色| 日本一区二区高清在线观看| 免费看av网站在线亚洲| 无码中文字幕日韩专区| 国产人在线成免费视频| 国产成人久久精品激情91| 日韩精品国产精品亚洲毛片| 国产a∨天天免费观看美女| 欧美mv日韩mv国产网站| 亚洲第一区二区快射影院| 情av一区二区三区在线观看| 无码人妻精品一区二区三区东京热| 亚洲精品国产福利一二区| av草草久久久久久久久久久| 狼狼色丁香久久女婷婷综合 | 97在线观看| 久久久国产精品福利免费| 免费人成视频网站在线观看不卡 | 97福利视频| 视频一区二区三区国产| 日本男人精品一区二区| 色婷婷五月综合激情中文字幕| 无套内谢的新婚少妇国语播放| 国产chinese在线视频| 在线人妻va中文字幕| 特黄做受又硬又粗又大视频小说| 亚洲欧美日韩中文天堂| 亚洲一区二区三区新视频| 欧洲美熟女乱av亚洲一区| 性色av 一区二区三区| 欧美人与动牲交片免费| 日韩精品人妻一区二区三区蜜桃臀| 中文字幕av中文字无码亚| 国产山东熟女48嗷嗷叫| 久久国产欧美日韩高清专区|