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 によって検出されたロール (「権限」) が返されます。

search-filter は、ou "groups" の "(member={0})" です。つまり、ユーザー DN と一致する値を持つ "member" 属性を持つ "groups" ou のエントリを検索することによって、ロールが取得されます。以下のコメントの ldif の例では、グループ メンバーシップ属性として「member」ではなく「uniqueMember」を使用しているようです。

ドキュメント (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 に答える