• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    AOP與權限控制實現

    發布: 2007-6-07 16:39 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 58次 | 進入軟件測試論壇討論

    領測軟件測試網

    以往在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容器服務器的配置工作,具體技術細節參考我的書籍《Java實用系統開發指南》第六章。

    其實,容器的權限實現也是一種從一個切面來解決問題方式,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量,角色概念在其中起著不可忽視的重要作用。這是另外一個研究課題了。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: aop 控制 權限 實現


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>