Spring Security を使用してspring-security-ldap
おり、Spring Boot アプリケーションでの認証に使用しています。
LdapAuthoritiesPopulator
ユーザーの役割を決定するために LDAP サーバーからいくつかのエントリを検索するを実装したいと考えています。これらのエントリはユーザーの下にないため、メソッドにuserData
提供されるオブジェクトgetGrantedAuthorities
では不十分です。(LDAP サーバーを制御できないため、ロールをユーザー エントリに追加できません)。
呼び出し時にSpring ContextSource
Securityが作成する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;
}
}