2011-09-20 118 views
0

我正在使用OpenDS進行我的應用程序的身份驗證。我能夠成功驗證用戶,但無法獲取用戶的角色。 以下是XML文件中的配置.....Spring Security - 檢索用戶的角色

<bean id="secondLdapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> 
<constructor-arg> 
<bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> 
<constructor-arg ref="contextSource" /> 
<property name="userSearch"> 
<bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> 
<constructor-arg index="0" value="ou=people"/> 
<constructor-arg index="1" value="(uid={0})"/> 
<constructor-arg index="2" ref="contextSource" /> 
</bean> 
</property> 
</bean> 
</constructor-arg> 
<constructor-arg> 
<bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> 
<constructor-arg ref="contextSource" /> 
<constructor-arg value="ou=groups" /> 
<property name="groupSearchFilter" value="(member={0})"/> 
<property name="rolePrefix" value="ROLE_"/> 
<property name="searchSubtree" value="true"/> 
<property name="convertToUpperCase" value="true"/> 
</bean> 
</constructor-arg> 
</bean> 

請幫我弄的角色。

回答

3
Collection<? extends GrantedAuthority> roles = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); 

,將返回你的發現這個DefaultLdapAuthoritiesPopulator角色(「當局」)

的搜索過濾器「(成員= {0})」中OU「羣體」,即角色通過搜索具有與用戶dn匹配的值的「成員」屬性的「組」中的條目來檢索。在下面註釋中的示例ldif中,您看起來像使用「uniqueMember」而不是「member」作爲您的組成員屬性,

如果您仔細閱讀文檔 (http://static.springsource.org/ spring-security/site/docs/3.1.x/apidocs/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulator.html),您將看到ldif的示例以及不同屬性在populator中的映射。

+0

是的,但我沒有得到任何角色,當我檢查列表的長度。 以下是來自OpenDS的LDIF,用戶擁有的角色。 DN:CN = role1上,OU =團體,DC =阿尼爾,DC = COM CN:role1上 對象類:頂 對象類:groupOfUniqueNames的 uniqueMember:UID = user.2,OU =人民,DC =阿尼爾,DC = com的 uniqueMember:uid = user1,ou = People,dc = anil,dc = com給出user1角色1。但是當我試圖獲得user1的角色時,它並沒有返回任何角色。 我覺得我錯過了XML中的一些配置參數。 – 2011-09-21 03:58:40

+0

請參閱上面的我的更新 – pap

相關問題