Spring Security を使用してspring-security-ldapおり、Spring Boot アプリケーションでの認証に使用しています。
LdapAuthoritiesPopulatorユーザーの役割を決定するために LDAP サーバーからいくつかのエントリを検索するを実装したいと考えています。これらのエントリはユーザーの下にないため、メソッドにuserData提供されるオブジェクトgetGrantedAuthoritiesでは不十分です。(LDAP サーバーを制御できないため、ロールをユーザー エントリに追加できません)。
呼び出し時にSpring ContextSourceSecurityが作成するauth.ldapAuthentication().contextSource()(下のコードの(1)参照)をLdapAuthoritiesPopulator. しかし、 は のLdapAuthoritiesPopulator前に作成され、はまだ存在しないWebSecurityConfigurerAdapterため、これは機能しません。ContextSource
MyWebSecurityConfigurerAdapterには次のメソッドが含まれています。
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.contextSource() // (1)
.url("ldap://example.org/o=organization")
.and()
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.userSearchFilter("uid={0}");
}
ldapAuthoritiesPopulatorクラスは現在、単純に追加するダミーの実装ですROLE_USER:
@Component
public class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {
@Override
public Collection<? extends GrantedAuthority> getGrantedAuthorities(
DirContextOperations userData, String username) {
// I want to look up some entries in LDAP here, so I need a ContextSource
// but I can't inject it because it does not exist when this bean is created
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("USER"));
return authorities;
}
}