<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統(tǒng)計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    Liferay 安全管理(轉(zhuǎn))

    企業(yè)應(yīng)用整合成為了越來越多的企、事業(yè)單位的當務(wù)之急,我所處環(huán)境也不可避免的遇到這個棘手的問題,各種技術(shù)的交集使得portal技術(shù)有了大顯身手之處。可惜IBM、BEA的高額費用讓我們望而卻步,自然,開源的portal成為了首選,Liferay是開源社區(qū)里一個非常活躍的項目:)而且重要的是其技術(shù)架構(gòu)如圖1,也和我們現(xiàn)在的技術(shù)路線相近,所以我們決定采用Liferay(版本:liferay-portal-src-4.1.2)作為基礎(chǔ)來進行應(yīng)用開發(fā)和系統(tǒng)整合。

    圖1 Liferay技術(shù)架構(gòu)

     
     

    要用好這個基礎(chǔ)平臺,必須要對她的自身實現(xiàn)原理有個比較清晰的認識,以下文章為我在研究Liferay原理時所做的一些筆記,現(xiàn)整理和分享(由于筆記帶有強烈的個人思想,有錯誤再所難免,希望能對進一步的分析做為鋪墊,更歡迎批評指正)。

     

    Liferay Portal

    Liferay JAAS權(quán)限管理

    Liferay的業(yè)務(wù)邏輯管理

    Liferay二次開發(fā)

    Liferay WSRP

     

    Liferay的權(quán)限管理實現(xiàn)了一個典型的JAAS管理策略,所以在分析其本身前,在此首先介紹JAAS的驗證原理和Tomcat上如何開發(fā)標準JAAS應(yīng)用。

     JAAS驗證原理

    JAAS的核心類和接口可以被分為三種類型,大多數(shù)都在javax.security.auth包中。在J2SE 1.4中,還有一些接口的實現(xiàn)類在com.sun.security.auth包中,如下所示:

    & #61557;       普通類 Subject,Principal,Credential(憑證)

     Subject類代表了一個驗證實體,它可以是用戶、管理員、Web服務(wù),設(shè)備或者其他的過程。該類包含了三中類型的安全信息:

    1)        身份(Identities):由一個或多個Principal對象表示

    2)        公共憑證(Public credentials):例如名稱或公共密鑰

    3)        私有憑證(Private credentials):例如口令或私有密鑰

      Principal對象代表了Subject對象的身份。它們實現(xiàn)了java.security.Principaljava.io.Serializable接口。在Principal類中,最重要的方法是getName()。該方法返回一個身份名稱。在Subject對象中包含了多個Principal對象,因此它可以擁有多個名稱。由于登錄名稱、身份證號和Email地址都可以作為用戶的身份標識,可見擁有多個身份名稱的情況在實際應(yīng)用中是非常普遍的情況。

    在上面提到的憑證并不是一個特定的類或借口,它可以是任何對象。憑證中可以包含任何特定安全系統(tǒng)需要的驗證信息,例如標簽(ticket),密鑰或口令。Subject對象中維護著一組特定的私有和公有的憑證,這些憑證可以通過Subject 方法getPrivateCredentials()和getPublicCredentials()獲得。這些方法通常在應(yīng)用程序?qū)又械陌踩酉到y(tǒng)被調(diào)用。

    & #61557;       驗證 LoginContext,LoginModule,CallBackHandlerCallback

    驗證:LoginContext

      在應(yīng)用程序?qū)又?,你可以使?/span>LoginContext對象來驗證Subject對象。LoginContext對象同時體現(xiàn)了JAAS的動態(tài)可插入性(Dynamic Pluggability),因為當你創(chuàng)建一個LoginContext的實例時,你需要指定一個配置。LoginContext通常從一個文本文件中加載配置信息,這些配置信息告訴LoginContext對象在登錄時使用哪一個LoginModule對象。

      下面列出了在LoginContext中經(jīng)常使用的三個方法:

    & #61550;         login () 進行登錄操作。該方法激活了配置中制定的所有LoginModule 象。如果成功,它將創(chuàng)建一個經(jīng)過了驗證的Subject對象;否則拋出LoginException異常。

    & #61550;         getSubject () 返回經(jīng)過驗證的Subject對象

    & #61550;         logout () 注銷Subject對象,刪除與之相關(guān)的Principal對象和憑證

      驗證:LoginModule

      LoginModule是調(diào)用特定驗證機制的接口。J2EE 1.4中包含了下面幾種LoginModule的實現(xiàn)類:

    & #61550;         JndiLoginModule 用于驗證在JNDI中配置的目錄服務(wù)

    & #61550;         Krb5LoginModule 使用Kerberos協(xié)議進行驗證

    & #61550;         NTLoginModul 使用當前用戶在NT中的用戶信息進行驗證

    & #61550;         UnixLoginModule 使用當前用戶在Unix中的用戶信息進行驗證

     

      同上面這些模塊綁定在一起的還有對應(yīng)的Principal接口的實現(xiàn)類,例如NTDomainPrincipalUnixPrincipal。這些類在com.sun.security.auth包中。

     

      LoginModule接口中包含了五個方法:

    1)        initialize () 當創(chuàng)建一LoginModule實例時會被構(gòu)造函數(shù)調(diào)用

    2)        login () 進行驗證,通常會按照登錄條件生成若干個Principal對象

    3)        commit () 進行Principal對象檢驗,按照預定義Principal條件檢驗Login生成的Principal對象,所有需要的條件均符合后,把若干個生成的Principal對象付給Subject對象,JAAS架構(gòu)負責回傳給LoginContext.

    4)        abort () 當任何一個LoginModule對象驗證失敗時都會調(diào)用該方法。任何已經(jīng)和Subject對象綁定的Principal對象都會被解除綁定。

    5)        logout () 刪除與Subject對象關(guān)聯(lián)的Principal對象和憑證,消除Subject,Principal等認證對象。

     驗證:CallbackHandlerCallback

      CallbackHandlerCallback對象可以使LoginModule對象從系統(tǒng)和用戶那里收集必要的驗證信息,同時獨立于實際的收集信息時發(fā)生的交互過程。

      

      JAASjavax.sevurity.auth.callback包中包含了七個Callback的實現(xiàn)類和兩個CallbackHandler的實現(xiàn)類:ChoiceCallback、ConfirmationCallback、LogcaleCallbackNameCallbackPasswordCallback、TextInputCallback、TextOutputCallback、DialogCallbackHandlerTextCallBackHandler。Callback接口只會在客戶端會被使用到。我將在后面介紹如何編寫你自己的CallbackHandler類。

     

    授權(quán) PolicyAuthPermission,PrivateCredentialPermission

    要了解Liferaytomcat版本)的權(quán)限管理,必須首先了解JAAStomcat上的應(yīng)用。

     

    u          Tomcat服務(wù)器JAAS配置方法

      和在應(yīng)用程序運行JAAS不同的是,配置JAAS方法會有很不一樣。我們使用的是Tomcat 5.0.x 應(yīng)用服務(wù)器,它的JAAS配置方法有數(shù)種,分別是

    & #61557;       JAASRealm

    & #61557;       JDBCRealm

    & #61557;       DataSourceRealm

    & #61557;       JNDIRealm

    & #61557;       MemoryRealm

    JAASRealm

     

    1.         把自定義 LoginModule、User、Role等相關(guān)類放入Tomcat classpath

    2.         把自定義login.config JAAS配置文件配置進JVM環(huán)境,例如: JAVA_OPTS=-DJAVA_OPTS=-Djava.security.auth.login.config==$CATALINA_HOME/conf/jaas.config

    3.         設(shè)置 web.xml里的 security-constraints 標簽設(shè)定需要保護的資源

    4.         $CATALINA_HOME/conf/server.xmlengine標簽里設(shè)置JAASRealm標簽

    以下是JAASRealm標簽的詳細說明

    屬性

    描述

    className

    只需要指定 org.apache.catalina.realm.JAASRealm

    debug

    設(shè)置debug級別,默認為不設(shè)置0

    appName

    JAAS配置文件應(yīng)用名

    userClassNames

    自定義user Principals

    roleClassNames

    自定義 role Principals

    useContextClassLoader

    默認為true, 為了向后兼容類裝載方式,使用Tomcat4以上版本ContextLoader裝載方式

     

    以下是完整的tomcat服務(wù)器配置例子:

    %TOMCAT_HOME%/config/server.xml 中添加以下段落

    <Realm className="org.apache.catalina.realm.JAASRealm"            

                    appName="MyFooRealm"      

        userClassNames="org.foobar.realm.FooUser"      

         roleClassNames="org.foobar.realm.FooRole"

                          debug="99"/>

    上面介紹了tomcat的應(yīng)用,而liferaytomcat版本)也是利用了這種標準的tomcatJAAS實現(xiàn)。

    與權(quán)限管理、用戶認證的主要類包為:

    com.liferay.portal.security.auth.*

    com.liferay.portal.service.permission

    com.liferay.portal.struts.PortalRequestProcessor

     

    Liferay關(guān)于JAAS的實現(xiàn)包都在com.liferay.portal.security.auth.*下,在$catalina_home/conf/jaas.conf中定義了Liferay實現(xiàn)的loginModule,在我使用的版本中,PortalLoginModule將首先通過對象池取出一個自定義Liferay用戶自定義的實現(xiàn),即也可以在portal中再次自定義loginModule。顯然,如果沒有自定義的實現(xiàn),將根據(jù)用戶所使用的服務(wù)器自動進行選擇默認實現(xiàn)。

    Liferay自身所實現(xiàn)的user Principalsrole Principals也僅僅是保存了用戶的userid,以其作為自身標識,在登陸成功時賦予了所有用戶“users”角色:

    PortalRole role = new PortalRole("users");

    getSubject().getPrincipals().add(role);

    LiferayPortalRequestProcessor擴展了TilesRequestProcessor,實現(xiàn)了自定義的請求處理流程。在請求流程中復寫了processRoles(),在這個函數(shù)中進行了用戶權(quán)限的判斷,從而達到了對web資源的保護。

    PermissionLiferay定義的用戶訪問的權(quán)限判斷,由processRoles調(diào)用進行訪問控制。

    值得一提的是,Liferay本身也含有登陸模塊,這個登陸模塊所做的主要工作為通過認證確定用戶的登陸信息正確,并通過用戶的登陸信息取得用戶userid存放在session中,為JAAS的登陸模塊提供基礎(chǔ)(即通過登陸的正確用戶id與密碼)。登陸的用戶默認為LDAP登陸,但是為默認禁用,所以用戶認證Liferay都通過一個數(shù)據(jù)庫的認證實現(xiàn)在loginAction中進行的用戶判斷,取出了useridpassword存放在session中。

    整個過程如下:

     

    如上圖所示,觸發(fā)JAAS的登陸模塊的是在登陸成功后轉(zhuǎn)向了/c/portal/protected,而此路徑為tomcat的安全域,所以tomcat將調(diào)用用戶自定義的登陸模塊進行用戶認證,通過認證后通過對用戶角色的對比,來判斷用戶是否允許訪問。

     圖2 Liferay認證流程

      

     

    副錄:幫助進行相關(guān)類查看

    SecureFilter->進行訪問地址限制和是使用安全連接轉(zhuǎn)換。

    PropsUtilportal-ejb.jar里的portal.property

    MainServlet 擴展Strutsaction Serverlet,進行映射。

    posted on 2007-05-31 13:45 junky 閱讀(1322) 評論(0)  編輯  收藏 所屬分類: portal

    主站蜘蛛池模板: 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 亚洲国产欧美国产综合一区| 久久久高清日本道免费观看| 亚洲国产精品成人久久| 一个人看的www免费在线视频| 日韩在线免费电影| 亚洲天然素人无码专区| 午夜一区二区免费视频| 婷婷亚洲综合一区二区| 亚洲人成无码网WWW| 久久国产一片免费观看| 边摸边吃奶边做爽免费视频网站 | 国语成本人片免费av无码| 亚洲制服丝袜一区二区三区| 美女视频黄免费亚洲| 亚洲永久网址在线观看| 国产在线ts人妖免费视频| 一级毛片a免费播放王色电影| 久久久久久亚洲精品不卡| 久久青草精品38国产免费| 亚洲自偷自拍另类12p| 黄色片在线免费观看| 亚洲av第一网站久章草| 亚洲国产V高清在线观看| 国产午夜无码片免费| 国产男女猛烈无遮档免费视频网站| 国产亚洲人成在线播放| 亚洲五月午夜免费在线视频| 国产免费AV片在线观看| 国产亚洲国产bv网站在线| 免费国产不卡午夜福在线| 国产在线观看免费av站| 亚洲一卡2卡3卡4卡国产网站| 日韩精品无码人妻免费视频| 黄色短视频免费看| 亚洲一级免费视频| 亚洲国产成人精品久久久国产成人一区二区三区综 | 污污污视频在线免费观看| 亚洲精品无码午夜福利中文字幕| 色欲国产麻豆一精品一AV一免费| 亚洲AV无码乱码在线观看代蜜桃|