как остановить поиск ldap, когда найден результат - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь получить имя пользователя, вошедшего в систему, в параметре Однозначный. Я могу найти имя группы, но поиск - это число, даже если я нахожу человека в поиске ldap и в и получает

PartialResultException: необработанные ссылки (и) продолжения;

Вот мой код

Я хочу остановить процесс ldapTemplate.search, когда получу успешный результат, у вас, ребята, есть идеи?

public List<String> getUserGroup(String username) throws Exception {
        try {
            LdapQuery query;
            LdapTemplate ldapTemplate = ldapConf.ldapTemplate();
            if (ldapConf.getSearchBase().isEmpty()) {
                System.out.println("searchbase empty");
                query = query().where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
            } else
                query = query().base(ldapConf.getSearchBase()).where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
            List<String> result = ldapTemplate.search(query, new AttributesMapper<String>() {
                public String mapFromAttributes(Attributes attrs) throws NamingException, javax.naming.NamingException {

                    for (Enumeration vals = attrs.get("distinguishedName").getAll(); vals.hasMoreElements();) {
                        String userName = (String) vals.nextElement();
                        if (userName.contains(username)) {
                            return (String) attrs.get("distinguishedName").get();
                        }
                    }

                    return null;
                }
            });
            logger.debug("ldap groups" + result);
            while (result.remove(null)) {
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e, e);
            throw e;
        }
    } 

1 Ответ

0 голосов
/ 24 апреля 2020

Я совершенно не понял механизм поиска ldap. Мой запрос ldap также был неправильным

query = query().where(env.getProperty("ldap.searchKeyword")).isPresent();

вместо isPresent() Я должен был использовать is(username), чтобы я мог напрямую получить нужного пользователя. Также я пытался получить DN пользователя в своем коде. Вместо new AttributesMapper<String>(), new ContextMapper<String>() укажите DN

...