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

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

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

    差沙的密碼 -- SSHWSFC's code
    閱讀本Blog請自備塑料袋一只
    posts - 14,  comments - 59,  trackbacks - 0
    Acegi好早就實(shí)現(xiàn)了ACL(好像是0.5),但是使用起來確實(shí)有點(diǎn)麻煩,所以用的不是太廣泛。這里簡單的說明一下使用方法,希望有更多的朋友來試試。

    首先要理解Acegi里面Voter的概念,ACL正是在一個(gè)Voter上擴(kuò)展起來的。現(xiàn)來看一下AclVoter的配置。

    ????<bean?id="aclBeanReadVoter"?class="org.acegisecurity.vote.BasicAclEntryVoter">
    ????????
    <property?name="processConfigAttribute">
    ????????????
    <value>ACL_READ</value>
    ????????
    </property>
    ????????
    <property?name="processDomainObjectClass">
    ????????????
    <value>org.springside.modules.security.acl.domain.AclDomainAware</value>
    ????????
    </property>
    ????????
    <property?name="aclManager">
    ????????????
    <ref?local="aclManager"/>
    ????????
    </property>
    ????????
    <property?name="requirePermission">
    ????????????
    <list>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.ADMINISTRATION"/>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.READ"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    1. ACL_READ指的是這個(gè)Voter對哪些SecurityConfig起作用,我們可以把ACL_READ配置在想要攔截的Method上。比方說我們要攔截readOrder這個(gè)方法,以實(shí)現(xiàn)ACL控制,可以這樣配置。
      orderManager.readOrder=ACL_READ
    2. processDomainObjectClass指出哪些DomainObject是要進(jìn)行ACL校驗(yàn)的。
    3. aclManager是一個(gè)比較重要的概念,主要負(fù)責(zé)在權(quán)限列表中根據(jù)用戶和DomainObject取得acl列表。
    4. requirePermission指出要進(jìn)行這個(gè)操作必須具備的acl權(quán)限,比方說read操作就必須有ADMINISTRATION或READ兩個(gè)權(quán)限。

    其實(shí)整個(gè)過程看下來比較清晰,下面來看一下AclManager如何配置。

    ????<!--?=========?ACCESS?CONTROL?LIST?LOOKUP?MANAGER?DEFINITIONS?=========?-->

    ????
    <bean?id="aclManager"?class="org.acegisecurity.acl.AclProviderManager">
    ????????
    <property?name="providers">
    ????????????
    <list>
    ????????????????
    <ref?local="basicAclProvider"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="basicAclProvider"?class="org.acegisecurity.acl.basic.BasicAclProvider">
    ????????
    <property?name="basicAclDao">
    ????????????
    <ref?local="basicAclExtendedDao"/>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="basicAclExtendedDao"?class="org.acegisecurity.acl.basic.jdbc.JdbcExtendedDaoImpl">
    ????????
    <property?name="dataSource">
    ????????????
    <ref?bean="dataSource"/>
    ????????
    </property>
    ????
    </bean>

    很明顯ACLManager繼承了Acegi的一貫風(fēng)格,Provider可以提供多種取得ACL訪問列表的途徑,默認(rèn)的是用basicAclProvider在數(shù)據(jù)庫中取得。既然提到了數(shù)據(jù)庫,那我們就來看一下Acegi默認(rèn)提供的ACL在數(shù)據(jù)庫里的保存表結(jié)構(gòu):

    CREATE?TABLE?acl_object_identity?(
    id?
    IDENTITY?NOT?NULL,
    object_identity?VARCHAR_IGNORECASE(
    250)?NOT?NULL,
    parent_object?
    INTEGER,
    acl_class?VARCHAR_IGNORECASE(
    250)?NOT?NULL,
    CONSTRAINT?unique_object_identity?UNIQUE(object_identity),
    FOREIGN?KEY?(parent_object)?REFERENCES?acl_object_identity(id)
    );
    CREATE?TABLE?acl_permission?(
    id?
    IDENTITY?NOT?NULL,
    acl_object_identity?
    INTEGER?NOT?NULL,
    recipient?VARCHAR_IGNORECASE(
    100)?NOT?NULL,
    mask?
    INTEGER?NOT?NULL,
    CONSTRAINT?unique_recipient?UNIQUE(acl_object_identity,?recipient),
    FOREIGN?KEY?(acl_object_identity)?REFERENCES?acl_object_identity(id)
    );
    1. acl_object_identity表存放了所有受保護(hù)的domainObject的信息。其中object_identity字段保存了domainObject的class和id,默認(rèn)的保存格式是:domainClass:domainObjectId。
    2. acl_permission?就是ACL權(quán)限列表了,recipient?是用戶或角色信息,mask表示了這個(gè)用戶或角色對這個(gè)domainObject的訪問權(quán)限。注意這些信息的保存格式都是可以根據(jù)自己的需要改變的。

    這樣讀取和刪除的時(shí)候Acegi就能很好的完成攔截工作,但是讀取一個(gè)List的時(shí)候,如何才能把該用戶不能操作的domainObject剔除掉呢?這就需要afterInvocationManager來完成這個(gè)工作。下面來看下配置:

    ????<!--?==============?"AFTER?INTERCEPTION"?AUTHORIZATION?DEFINITIONS?===========?-->

    ????
    <bean?id="afterInvocationManager"?class="org.acegisecurity.afterinvocation.AfterInvocationProviderManager">
    ????????
    <property?name="providers">
    ????????????
    <list>
    ????????????????
    <ref?local="afterAclCollectionRead"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    ????
    <!--?Processes?AFTER_ACL_COLLECTION_READ?configuration?settings?-->
    ????
    <bean?id="afterAclCollectionRead"?class="org.acegisecurity.afterinvocation.BasicAclEntryAfterInvocationCollectionFilteringProvider">
    ????????
    <property?name="aclManager">
    ????????????
    <ref?local="aclManager"/>
    ????????
    </property>
    ????????
    <property?name="requirePermission">
    ????????????
    <list>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.ADMINISTRATION"/>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.READ"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    afterAclCollectionRead會(huì)在攔截的方法執(zhí)行結(jié)束的時(shí)候執(zhí)行。主要的作用就是在返回的List中挨個(gè)檢查domainObject的操作權(quán)限,然后根據(jù)requirePermission來剔除不符合的domainObject。
    posted on 2006-06-17 00:20 差沙 閱讀(2276) 評論(4)  編輯  收藏 所屬分類: avaj

    FeedBack:
    # re: 在Acegi中使用ACL
    2006-07-05 10:48 | acegi
    你好,能不能寫的詳細(xì)點(diǎn),如把你的訂單管理的acl寫出來,謝謝  回復(fù)  更多評論
      
    # re: 在Acegi中使用ACL
    2006-07-05 10:49 | acegi
    有點(diǎn)地方不明白,能請教你嗎  回復(fù)  更多評論
      
    # re: 在Acegi中使用ACL
    2006-07-18 15:27 | acegi
    想請教個(gè)問題,可否  回復(fù)  更多評論
      
    # re: 在Acegi中使用ACL[未登錄]
    2008-01-17 14:12 | 白菜
    請問文中的
    ACL_READ指的是這個(gè)Voter對哪些SecurityConfig起作用,我們可以把ACL_READ配置在想要攔截的Method上。比方說我們要攔截readOrder這個(gè)方法,以實(shí)現(xiàn)ACL控制,可以這樣配置。
    orderManager.readOrder=ACL_READ
    orderManager.readOrder=ACL_READ是在哪里配置的?能說的詳細(xì)點(diǎn)嗎?  回復(fù)  更多評論
      
    這家伙很懶,但起碼還是寫了一句話。

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 欧美亚洲国产SUV| 亚洲无线码一区二区三区| 免费一级毛片不卡在线播放| 亚洲国产成人久久精品99| 国产亚洲日韩一区二区三区| 亚洲国产精品嫩草影院在线观看| 久久亚洲精品无码AV红樱桃| 久久亚洲精品国产精品婷婷| 国产成人亚洲精品无码AV大片| 人体大胆做受免费视频| 久久国产精品一区免费下载| 很黄很色很刺激的视频免费| 波多野结衣中文一区二区免费 | 国产AV无码专区亚洲AV漫画| 亚洲国语精品自产拍在线观看| 亚洲一区二区三区在线观看蜜桃| 豆国产96在线|亚洲| 久久免费视频网站| 成人毛片18女人毛片免费| 国产午夜亚洲精品理论片不卡| 亚洲福利视频网址| 免费中文字幕视频| 18级成人毛片免费观看| 少妇亚洲免费精品| 亚洲精品国产啊女成拍色拍| 妇女自拍偷自拍亚洲精品| 免费日本一区二区| 国产真人无遮挡作爱免费视频| 亚洲国产成人一区二区三区| 亚洲熟女乱色一区二区三区| 在线看片免费人成视频久网下载 | 麻豆成人精品国产免费| 国产亚洲精品资源在线26u| 国产亚洲福利在线视频| 日本高清不卡aⅴ免费网站| 卡1卡2卡3卡4卡5免费视频| 亚洲AV无码专区电影在线观看| 亚洲精品人成网线在线播放va | 国产成人无码区免费内射一片色欲| 成人啪精品视频免费网站| 亚洲av综合av一区|