Поиск Spring в LdapTemplate: PartialResultException: необработанные ссылки на продолжение; оставшееся имя '/'

Я добавляю пользователей через LDAP для определенного приложения, сделанного с весны.

Хотя это работает для большинства случаев, в некоторых случаях это не работает...

Получить пользователей, которых я использую:

public class LdapUserServiceImpl implements ILdapUserService {

    @Override
    public List<LdapUserVO> getUserNamesByQuery(String query) {
        return ldapTemplate.search(
            query().countLimit(15)
                    .where("objectClass").is("user")
                    .and("sAMAccountName").isPresent()
                    .and(query()
                            .where("sAMAccountName").like("*" + query + "*")
                            .or("sAMAccountName").is(query)
                            .or("displayName").like("*" + query + "*")
                            .or("displayName").is(query))
            ,
            new AttributesMapper<LdapUserVO>() {
                public LdapUserVO mapFromAttributes(Attributes attrs) throws NamingException {
                    LdapUserVO ldapUser = new LdapUserVO();
                    Attribute attr = attrs.get(ldapUserSearch);
                    if (attr != null && attr.get() != null) {
                        ldapUser.setUserName(attr.get().toString());
                    }
                    attr = attrs.get("displayName");
                    if (attr != null && attr.get() != null) {
                        ldapUser.setDisplayName(attr.get().toString());
                    }
                    return ldapUser;
                }
            });
    }
}

Так что это работает в большинстве случаев, но иногда я получаю следующую ошибку:

unprocessed continuation reference(s); remaining name "/"

Я много искал об этом, и я явно настроил

DefaultSpringSecurityContextSource ctxSrc = new DefaultSpringSecurityContextSource(ldapUrl);
ctxSrc.setReferral("follow");

Еще немного информации:

  • Поисковый запрос "admin_a" работает, а "admin_ah" - нет
  • Версия Spring 4.2.5. ВЫПУСК
  • Версия Spring ldap-core - 2.0.2.

Мне кажется странным, что оставшееся имя является корневым каталогом... У кого-нибудь есть идеи, как это исправить, или даже с чего начать искать?

Заранее спасибо!

2 ответа

Решение

Это может быть связано с тем, что Active Directory не может автоматически обрабатывать рефералы. Пожалуйста, ознакомьтесь с Javadoc LdapTemplate.

Если это так, установите ignorePartialResultException собственность на true в вашем ldapTemplate конфигурации.

Причиной этой ошибки в моем случае было то, что структура новой AD изменилась (userPrincipleName теперь был адресом электронной почты вместо логина). Из-за этого аутентификация в AD работала нормально, но не было найдено ни одной записи, которая соответствовала бы фильтру, и, как таковая, не возвращала никакого результата. Таким образом, PartialResultException был только указанием, а не причиной. причина в отсутствии какого-либо результата в методе searchForSingleEntryInternal класса SpringSecurityLdapTemplate. В моем случае мне нужно было убедиться, что я использовал правильное userPrincipleName и настроить правильные домен и baseDN в моем ActiveDirectoryLdapAuthenticationProvider.

Другие вопросы по тегам