我在具有自定義登錄領域的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)
方法實現所需的查詢?