什麼是AOP系列之二:AOP與許可權控制實現(轉)
什麼是AOP系列之二:AOP與許可權控制實現(轉)[@more@] 以往在J2EE系統中,訪問許可權控制系統的實現主要有兩種:應用程式實現和J2EE容器實現。 傳統的應用程式實現 這是最直接的、傳統的一種解決方式,通常是在具體方法前加一個許可權判斷語句,如下: public class ForumFactoryProxy extends ForumFactory { ...... public Forum createForum(String name, String description) throws UnauthorizedException, ForumAlreadyExistsException { if (permissions.get(ForumPermissions.SYSTEM_ADMIN)) { Forum newForum = factory.createForum(name, description); return new ForumProxy(newForum, authorization, permissions); }else { throw new UnauthorizedException(); } } ...... } 上述程式碼是Jive論壇中一段建立論壇功能的程式碼,在建立論壇前,首先進行許可權角色檢驗,如果當前使用者是系統管理員,那麼可以實現真正的建立。 這種在具體功能前加入許可權操作檢驗的實現方式有很多缺點: 1.每個功能類都需要相應的許可權檢驗程式碼,將程式功能和許可權檢驗混淆在一起,存在緊密的耦合性,擴充套件修改難度大。 2.如果類似Jive,以代理模式為每個功能類實現一個相應的代理類,雖然解耦了程式功能和許可權檢驗,但是,從某個角色的許可權檢驗這個切面考慮,涉及具體Proxy類太多,擴充套件修改難度大。 J2EE容器實現 在AOP概念沒有誕生前,J2EE規範已經提供了關於許可權控制的容器實現標準,這種變遷結果如下圖所示: 原來需要每個應用程式實現的許可權Proxy轉為整個容器的Proxy實現,其中JDK1.3以後的動態代理API為這種轉換實現提供了技術保證。 非常明顯,透過容器實現許可權控制驗證可以大大簡化應用程式的設計,分離了應用系統的許可權關注,將許可權控制變成了對J2EE容器伺服器的配置工作。其實,容器的許可權實現也是一種從一個切面來解決問題方式,AOP概念誕生後,許可權控制實現由此也帶來了兩個方向的變化: 1. J2EE容器級別的許可權實現,也就是容器自身的許可權實現。 2. J2EE應用程式級別的許可權實現。 許可權控制在容器級別實現似乎使得J2EE開發者感覺沒有靈活性和可擴充套件性,其實象JBoss 4.0這樣的J2EE容器,由於引入了AOP概念,使得J2EE開發者在自己的應用系統中能夠直接操縱容器的一些行為。容器和應用系統由於AOP引入的Aspect切面,變得可以成為一體了。(如果使用BEA的EJBC編輯要浪費多少時間?) 對於J2EE應用系統開發者,能夠做到上述境界,必須的條件是對JBoss之類J2EE容器必須有足夠的瞭解,因為這些方式並不是J2EE標準,有可能在移植到新的J2EE容器,這些知識和投入變得無用(也有可能將來J2EE擴充套件其標準)。 很顯然,使用AOP實現J2EE應用系統級別的許可權控制,是解決上述移植風險的一個主要方法,但是帶來的缺點是必須親自從零開始做起,耗費時間不會很短。 AOP下的應用程式許可權控制實現 引入AOP概念後的許可權實現已經不是前面Jive例項那樣“落後”,我們對這個例項進行重整(Refactorying)如下: 建立一個Aspect,專門用於許可權檢查 private static aspect PermissionCheckAspect { private pointcut permissionCheckedExecution() : execution ( public Forum ForumFactory.createForum(String , String )); before () : permissionCheckedExecution() { if !(permissions.get(ForumPermissions.SYSTEM_ADMIN)) { throw new UnauthorizedException(); } } } 該段程式碼功能是:當系統執行ForumFactory.createForum方法之前,將首先檢查是否有許可權操作。 程式碼中pointcut觸發的條件是createForum方法執行,如果有其它需要系統管理員身份才能執行的方法加入,將寫成如下程式碼: private pointcut permissionCheckedExecution() : execution ( public Forum ForumFactory.createForum(String , String )) || execution ( public Forum ForumFactory.deleteForum(String , String )) || ...... execution ( public Forum ForumFactory.deleteThread(String , String )); 這些方法陳列比較瑣碎,依據AspectJ語法,可以簡化如下: private pointcut permissionCheckedExecution() : execution ( public * ForumFactory .*(..)); 有興趣者可以將Jive論壇中相關許可權Proxy部分使用AOP重整,另外,由於Jive沒有引入角色概念,導致許可權和使用者HardCode在編碼中,如何實現許可權和使用者解耦,最小限度的降低HardCode量,角色概念在其中起著不可忽視的重要作用。
·上一篇:·下一篇:
最新更新 | ||
·······WeblogicServer9新特性:J2EELibraries···················使用訊息驅動Beans(3)···· |
| ||
| | | | | | | | ||
| ||
Copyright © 2004 - 2007 All Rights Reserved
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-968189/,如需轉載,請註明出處,否則將追究法律責任。
上一篇:
確保提高你的J2EE專案的質量(轉)
請登入後發表評論
登入
全部評論
|
相關文章
- spring aop實現許可權控制,路徑控制Spring
- 許可權控制及AOP日誌
- spring aop實現許可權管理Spring
- SpringBoot(一) 如何實現AOP的許可權控制Spring Boot
- spring aop實現簡單的許可權控制功能Spring
- 什麼是AOP系列之一:AOP概念解析(轉)
- Spring系列之aAOP AOP是什麼?+xml方式實現aop+註解方式實現aopSpringXML
- 提問:使用spring aop實現許可權管理Spring
- 【轉】一個關於用AOP實現許可權控制的問題,不知道大家怎麼想?
- spring2 Aop與事務、許可權管理Spring
- 分享!! 如何自定義許可權校驗的註解並用AOP攔截實現許可權校驗
- Laravel實現許可權控制Laravel
- 什麼是AOP程式設計?程式設計
- Spring 使用Aop 做切面日誌,和許可權。Spring
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 什麼是AOP,以及在Springboot中自定義AOPSpring Boot
- Android 採用AOP方式封裝6.0許可權管理Android封裝
- AOP實現事務控制的疑惑
- 使用MEF與Castle實現AOPAST
- AOP原始碼解析之二-建立AOP代理前傳,獲取AOP資訊原始碼
- Spring Security實現統一登入與許可權控制Spring
- Spring框架系列(9) - Spring AOP實現原理詳解之AOP切面的實現Spring框架
- 使用spring AOP管理許可權時攔截位置的困擾Spring
- C#進階系列——AOP?AOP!C#
- 前端許可權控制系統的實現思路前端
- Elasticsearch 許可權控制Elasticsearch
- SpringMVC使用攔截器實現許可權控制SpringMVC
- ORACLE FGAC(細粒度許可權控制)(轉)Oracle
- Spring——AOP實現Spring
- js 中實現aopJS
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- Spring框架系列(10) - Spring AOP實現原理詳解之AOP代理的建立Spring框架
- AOP:利用Aspectj注入程式碼,無侵入實現各種功能,比如一個註解請求許可權
- Atlas 2.1.0 實踐(4)—— 許可權控制
- SpringSecurity許可權管理系統實戰—八、AOP 記錄使用者、異常日誌SpringGse
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- django許可權之二級選單Django