2013-04-30 17 views
1

我試圖將Spring Security與ACL支持集成到現有的GWT應用程序中,如果我點擊另一個無用的鏈接,我發誓將需要一個新的鼠標和鍵盤。我已經完成了使用Spring通過LDAP對Active Directory進行身份驗證所需的工作,並且我已經制定了如何根據AD屬性(即組成員身份)分配自定義權限,並且我甚至已經研究過如何使用自定義ACL架構對權限執行自定義檢查(真正的位掩碼操作)。我沒有想到的只是ACL表中的內容。Spring Security的ACL_OBJECT_IDENTITY表有何含義?

ACL_SID

id:bigint (pk) 
principal:boolean (ak) 
sid:varchar (ak) 

此表是不言自明;我們只會在這裏使用非主體條目。

ACL_CLASS

id:bigint (pk) 
class:varchar (ak) 

該表也是不言自明。據我瞭解,我們只是爲我們希望保護的每個類/接口創建一個入口。

ACL_ENTRY

id:bigint (pk) 
acl_object_identity:bigint (fak) 
ace_order:int (ak) 
sid:bigint (fk) 
mask:bigint 
granting:boolean 
audit_success:boolean 
audit_failure:boolean 

此表也大多不言自明;我們已經在mask字段中用bigint/long定製了架構,但問題源於acl_object_identity引用的內容。顯然,它指向ACL_OBJECT_IDENTITY現場,但...

ACL_OBJECT_IDENTITY

id:bigint (pk) 
object_id_class:bigint (fak) 
object_id_identity:bigint (ak) 
parent_object_identity:bigint (fk) 
owner_sid:bigint (fk) 
entries_inheriting:boolean 

object_id_identity是什麼?一個方法?它如何通過Spring Security的註釋來引用?

MyClass.java

@PreAuthorize("hasPermission(#someInput, 'READ')") 
public boolean myMethod(String someInput) { 
    return true; 
} 

據推測,#someInput莫名其妙指ACL_OBJECT_IDENTITY.object_id_identity領域,但如何?

回答

0

看看Grails Spring Security ACL Plugin Documentation。 它解釋了用於特定插件的域類,但它可能會對您有所幫助。查找AclObjectIdentity和AbstractAclObjectIdentity。

的ACL_OBJECT_IDENTITY.object_id_identity場是實例ID和唯一標識實例(連同object_id_class)

在你的榜樣,「someInput」將是實例。 這段代碼從beforementioned文檔採取:

@PreAuthorize("hasPermission(#report, delete) or hasPermission(#report, admin)") 
void deleteReport(Report report) { 
    report.delete() 
} 

它解釋本身IMMO。如果當前經過身份驗證的用戶對於給定的Report實例具有權限「admin」或「delete」,則報告將被刪除。報告是someInput在你的代碼片段。

希望這會有所幫助。

0

首先,您需要某種類型的域對象類來存儲您的數據。這個類必須有一個getId()方法。例如:

@PreAuthorize("hasPermission(#someInput, 'READ')") 
public boolean myMethod(DomainObject someInput) { 
    return true; 
} 

現在,someInput.getId()相同ACL_OBJECT_IDENTITY.object_id_identity:以

public class DomainObject { 
    private Long id; 
    private String data; 
    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public String getData() { 
     return data; 
    } 
    public void setData(String data) { 
     this.data = data; 
    } 
} 

改變你的安全方法。