我正在使用OpenDS进行应用程序身份验证。我能够成功验证用户,但无法获得用户的角色。 以下是XML文件中的配置.....
<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>
请帮助我获得角色。
答案 0 :(得分:3)
Collection<? extends GrantedAuthority> roles = SecurityContextHolder.getContext().getAuthentication().getAuthorities();
这将返回DefaultLdapAuthoritiesPopulator找到的角色(“权限”)
搜索过滤器是ou“groups”中的“(member = {0})”,即通过搜索“groups”中的条目来检索角色,其中“member”属性的值与用户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中的属性映射。