0

我正在使用 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>

请帮助我获得角色。

4

1 回答 1

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

这将返回 DefaultLdapAuthoritiesPopulator 找到的角色(“权限”)

搜索过滤器是“组”中的“(成员={0})”,即通过在“组”中搜索具有“成员”属性且值与用户 dn 匹配的条目来检索角色。在下面评论中的示例 ldif 中,您似乎使用“uniqueMember”而不是“member”作为您的组成员资格属性,

如果您仔细阅读文档(http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulator.html),您会看到示例ldif 以及不同属性如何在填充器中映射。

于 2011-09-20T11:43:10.237 回答