Аутентификация LDAP с помощью Spring - получение исключения PartialResultException - PullRequest
1 голос
/ 16 апреля 2019

Я следую этой статье о настройке аутентификации LDAP с помощью Spring
Теперь я могу войти в приложение, но я получаю это исключение:

Unprocessed Continuation Reference(s); nested exception is javax.naming.PartialResultException: 
Unprocessed Continuation Reference(s); remaining name 'DC=XEROX,DC=AD,DC=XEROX,DC=com'
Caused by: javax.naming.PartialResultException: Unprocessed Continuation Reference(s)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2917) ~[na:1.8.0_144]
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2891) ~[na:1.8.0_144]
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1846) ~[na:1.8.0_144]
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1769) ~[na:1.8.0_144]

в соответствии с другими статей, которые я читаю , мне нужно установить реферала для подписки, setReferral ("follow");

Но я не уверен, куда добавить это к этому коду:

String completeUrl = new StringBuffer(this.url).append(":")
                    .append(this.port)
                    .append("/")
                    .append(this.contextRoot)
                    .toString();

            auth.ldapAuthentication()
                    .userSearchFilter(userSearchFilter)
                    .userDnPatterns(userDnPatterns)
                    .contextSource()
                    .url(completeUrl)
                    .managerDn(managerDn)
                    .managerPassword(managerPassword);

1 Ответ

0 голосов
/ 18 июля 2019

Вы должны создать свой собственный contextSource, что-то вроде:

@Bean("internalLdapContextSource")
public LdapContextSource getLdapContextSource() {
    String ldapUrl = env.getProperty("ldap.server");
    String managerDn = env.getProperty("ldap.manager.distinguished.name");
    String managerPassword = env.getProperty("ldap.manager.password");
    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl(ldapUrl);
    contextSource.setUserDn(managerDn);
    contextSource.setPassword(managerPassword);
    Map<String, Object> baseEnvironmentProperties = new HashMap<>();
    baseEnvironmentProperties.put("java.naming.referral", "follow");
    contextSource.setBaseEnvironmentProperties(baseEnvironmentProperties);
    return contextSource;
}

Вы можете использовать setBaseEnvironmentProperties метод, как показано в примере, или setReferral (оба работают нормально).

Наконец, используйте .contextSource (getLdapContextSource ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...