org.springframework.ldap.core.LdapTemplate#ignorePartialResultException
長い質問をお詫びしますが、要するに、 Spring Java Config を使用してフラグを設定するにはどうすればよいのか疑問に思っています。
長々とした質問は...
私は会社の Active Directory を認証 (これはユーザー/パスワードのチェックを意味します) に使用して開始し、その後、承認 (つまり、どのロールを使用する権限があるか) に取り組みたいと考えています。
春の LDAP ガイドを使用して、ガイドの LDIF ファイルを使用する代わりに、会社の Active Directory に接続するように変更を加えました。デバッグから、プログラムが Active Directory に接続してユーザーを正しく認証することはわかっていますが、権限を取得するときに次の例外が発生します。
Unprocessed Continuation Reference(s); nested exception is javax.naming.PartialResultException
グーグルで調べたところ、これは一般的な LDAP/ActiveDirectory の問題であり、参照を無視するようにフラグを設定する必要があることがわかりました。この SO questionの例に従いました。ただし、それでも例外が発生し、デバッグから、ユーザーのロールを検索するときに次のメソッドでエラーが発生していることがわかります。
org.springframework.ldap.core.LdapTemplate#search(org.springframework.ldap.core.SearchExecutor, org.springframework.ldap.core.NameClassPairCallbackHandler, org.springframework.ldap.core.DirContextProcessor)
参考までに、私の WebSecurityConfig ファイル:
@Bean
public BaseLdapPathContextSource contextSource() throws Exception {
DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource("ldap://<ad-host>:389/");
contextSource.setUserDn(/*principleCN*/);
contextSource.setPassword(/*principlePassword*/);
contextSource.setReferral("ignore");
contextSource.afterPropertiesSet();
return contextSource;
}
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchFilter("(&(sAMAccountName={0})(objectclass=user))")
.userSearchBase("dc=<company>,dc=local")
.groupSearchBase("dc=<company>,dc=local")
.contextSource(contextSource());
}