2017-04-03 138 views
10

我在具有自定義登錄領域的WildFly 9.0.2服務器上運行Web應用程序(需要遞歸查詢多個組織單位A以查詢組織單位B是否從組織單位B爲用戶單位C)是在standalone.xml配置,像這樣:從用戶的多個OU遞歸查詢LDAP角色

​​

用戶通過提供自己的用戶名(如種皮),密碼(如登錄網站等等),然後從一個用戶組的下拉菜單(例如UserGroupA)。 然後,擴展LdapLoginModule的自定義登錄模塊(de.test.LoginModule.class)通過從獨立xml中獲取前綴並在其後添加後綴來構建主體字符串來執行角色查找,例如,前綴:uid=
構建通過的LoginModule:testA,ou=UserGroupA
後綴:,ou=users,dc=test,dc=de
,導致:uid=testA,ou=UserGroupA,ou=users,dc=test,dc=de 現在正好完美的作品。檢索ou=groups,dc=test,dc=de中的角色,並執行具有相應角色的web.xml中定義的安全性約束。

<security-constraint> 
    <display-name>Test-Service</display-name> 
    <web-resource-collection> 
     <web-resource-name>Test</web-resource-name> 
     <url-pattern>/admin/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>Only Project Processors may see this</description> 
     <role-name>Project Processor</role-name> 
    </auth-constraint>  
</security-constraint> 

現在組織單位「ProjectControlCenter」添加到LDAP樹結構,它看起來像這樣:

dc=test,dc=de 
|-- ou=applications 
| |-- ou=ProjectControlCenter 
| | |-- ou=permissions 
| | | |-- cn=group.Project Processor.manage 
| | | |-- cn=group.Project Processor.read 
| | | |-- cn=group.Project Monitorer.read 
| | | |-- ... 
| | |-- ou=resources 
| | | |-- cn=ProjectControlCenter.Applicaton 
| | | |-- cn=ProjectControlCenter.List 
| | | |-- cn=ProjectControlCenter.System 
| | | |-- ... 
|-- ou=groups 
| | |-- cn=Project Processor 
| | |-- cn=Project Monitorer 
| | |-- ... 
| |-- ou=users 
| | |-- ou=UserGroupA 
| | | |-- uid=testA 
| | | |-- uid=testB 
| | | |-- uid=testC 
| | |-- ou=UserGroupB 
| | |-- ... 

現在我需要查詢不僅是角色的ou=groups,dc=test,dc=de也是所有ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de其中分配的角色是用戶的唯一成員並將其添加到用戶。 此外,還需要另一個查詢來獲得是唯一成員的所有ou=resources,ou=ProjectControlCenter,ou=applications,dc=test,dc=de,並將其添加到用戶。

所以問題是:是否有任何方式遞歸查詢某個用戶的所有組,對這些組的權限和這些權限的資源通過LDAP配置,還是我需要重載LdapLoginModule.class的createLdapInitContext(String username, Object credential)方法實現所需的查詢?

回答

0

它的可能性,但只在一定程度上。你的用例似乎很複雜,我個人會避免這種設計。不知道你是否已經檢查過,但你的問題似乎與一個here有關。