Acegi ACL使用說明

2021-08-30 05:19:16 字數 3040 閱讀 7694

acegi acl使用說明

本文假設你對acegi其他部分已經比較熟悉。acegi 的acl控制是建立在對相應業務方法攔截的基礎上的。這裡以acegi自帶的contacts例子來說明。

先看看總的配置:

sample.contact.contactmanager.getall=after_acl_collection_read

sample.contact.contactmanager.getbyid=after_acl_read

sample.contact.contactmanager.delete=acl_contact_delete

sample.contact.contactmanager.deletepermission=acl_contact_admin

sample.contact.contactmanager.addpermission=acl_contact_admin

該***實現了org.aopalliance.intercept.methodinterceptor介面。在方法被呼叫之前,***會先呼叫 authenticationmanager判斷使用者身份是否已驗證,然後從objectdefinitionsource中獲取方法所對應的許可權,再呼叫accessdecisionmanager來匹配使用者許可權和方法對應的許可權。如果使用者沒有足夠許可權呼叫當前方法,則丟擲 accessdeniedexception使方法不能被呼叫。方法呼叫後會呼叫afterinvocationmanager對返回的結果進行再次處理。下面依次說明。

accessdecisionmanager的配置:

false

accessdecisionmanager介面有decide()和support()方法。decide()方法決策是否批准通過即方法是否容許呼叫,如果沒丟擲accessdeniedexception則為允許訪問資源,否則拒絕訪問。support()方法是根據配置屬性和受保護資源的類來判斷是否需要對該資源作出決策判斷。

accessdecisionmanager的 decisionvoters屬性需要乙個或多個voter(投票者),voter必須實現accessdecisionvoter 介面。voter的工作是去匹配使用者已擁有的許可權和受保護的資源要求的許可權,在該資源有相應許可權的情況下,如果匹配則投允許票,否則投反對票。

allowifallabstaindecisions屬性表示是否允許所有都棄權時就通過。voter的實現類rolevoter在當受保護資源的名字由role_開始時才參與投票。

accessdecisionmanager有三個實現類,功能各不相同:

affirmativebased: 當至少有乙個voter投允許票時才通過

unanimousbased: 沒有voter投反對票時才通過

consensusbased: 當所有voter都投允許票時才通過

下面列出乙個voter的配置:

acl_contact_delete

sample.contact.contact

上面第乙個配置裡有這麼一行:sample.contact.contactmanager.delete=acl_contact_delete

所以在呼叫sample.contact.contactmanager.delete這個方法時aclcontactdeletevoter會參與投票,它會獲得sample.contact.contact這個物件(這個物件從delete方法的引數中獲得),然後通過aclmanager去獲得當前使用者對該contact例項的acl許可權,最後拿這個許可權與我們需要的許可權比對,我們配置需要的許可權是org.acegisecurity.acl.basic.******aclentry.administration和org.acegisecurity.acl.basic.******aclentry.delete。如果我們通過aclmanager獲得的許可權包括這兩個配置的許可權之一,voter就投容許票,方法容許呼叫。如果不包括,那對不起,反對票,accessdecisionmanager就會丟擲accessdeniedexception。方法拒絕呼叫。

aclmanager的配置:

aclmanager是整個acl中乙個很核心的概念,它包含了兩個方法aclentry getacls(object domaininstance)和

aclentry getacls(object domaininstance, authentication authentication)。在了解這兩個方法前,我們先了解aclentry這個物件。aclentry只是乙個介面,系統中一般都是造型為basicaclentry。它包括了這個entry所保護的domainobject instance(這裡是contact),實際它實現上是以aclobjectidentity來替代這個domainobject的(domainclass+domainobjectid);它包括了誰(recipient)擁有這個domainobject instance以及他所對這個domainobject instance的操作許可權(mask)。

乙個domainobject instance對應了多個aclentry,比如一條通訊錄張三可以檢視,而李四可以管理,乙個contact instance就對應了兩個aclentry,第乙個aclentry包含資訊:所保護的domainobject(contact),誰(張三),許可權(檢視);第二個aclentry包含資訊:所保護的domainobject(contact),誰(李四),許可權(管理)。

這樣aclmanager的兩個方法就很好理解了getacls(object domaininstance)返回所有這個domaininstance所對應的許可權資訊,

getacls(object domaininstance, authentication authentication)在第乙個方法返回結果的基礎上做了過濾,過濾出和authentication(當前使用者)相關的許可權資訊。如果當前使用者是張三,則返回與張三對應的記錄。

這樣acegi就會攔截業務方法發揮相應的作用,但是在業務方法返回乙個list或是單個domainobject instance的時候,同樣也是需要把使用者沒有許可權檢視的domainobject instance過濾掉的,這時就要用afterinvocationmanager了,看配置:

使用說明 附註工具使用說明

附註工具使用說明 附註工具用途 附註工具主要用於更新利用word附註應用程式生成的帶域 的附註,該工具在word右鍵 更新鏈結 的基礎上進行了優化,故在使用時,不能再利用word右鍵 更新鏈結 而要用本工具的 更新當前鏈結 或 更新所有鏈結 使用說明 一 更換路徑 當利用word附註應用程式生成帶域...

使用說明 農用遮光網使用說明

農用遮光網使用說明 建築防塵網購買方 建築施工企業 在購買建築防塵網時,應該對 作出比較,可以分辨品牌 型號,且購買時應該在一定程度上了解信譽良莠。建築防塵網購買方 市場售賣方 在選購建築防塵網時,可以把 作為基礎,好的 可以用來彌補信譽不足,而差的 則需要按照你的服務收費。農用遮光網使用說明 用途...

Hibernate tools 使用說明

05年的8月份第一次接觸hibernate tools,使用起來感覺還不錯,但也沒有深入研究,後來由於一直在做乙個專案,再後來用了一陣myeclipse,現在換了公司,使用wtp all in one eclipse的乙個版本 生成domain的時候使用了hibernate tools,發現都不知怎...