Как выполнить операцию поиска в ldap используя spring - PullRequest
1 голос
/ 22 июня 2011

Я хочу найти конкретные данные пользователя из ldap. поэтому я записал следующий код, извлекающий информацию о пользователе, но он возвращает список объектов пользователя. По сути, я хочу, чтобы объект «человек», а не список объектов «человек». для получения я использую шаблон ldap. Как я могу изменить этот код, чтобы он возвращал объект person?

public void searchByFirstName(String loginId) {

        AndFilter filter = new AndFilter();
        filter.and(new EqualsFilter("objectclass", "Person"));
        filter.and(new EqualsFilter("cn", loginId));
        List list = ldapTemplate.search("", 
            filter.encode(),
            new AttributesMapper() {
                public Object mapFromAttributes(Attributes attrs) throws NamingException        {
                    return attrs.get("sn").get();
                }
            });


}

1 Ответ

4 голосов
/ 22 июня 2011

Метод, который вы вызываете, ldapTemplate.search () всегда возвращает список подходящих объектов.Это потому, что он находит все объекты, которые соответствуют вашим критериям на сервере LDAP.Если вы не уверены, что пользователь, соответствующий вашему loginId, существует, вы уже используете правильный метод.Просто проверьте длину списка и получите первый элемент из возвращенного списка.

Чтобы получить только один элемент из LDAP, вам нужно знать отличительное имя (DN)пользователь на сервере LDAP.DN - это уникальный идентификатор объекта в LDAP, и вам нужно знать это, если вы собираетесь искать отдельный объект специально.В зависимости от конфигурации LDAP это может быть что-то вроде cn=<loginId>,ou=users,dc=yourorg,dc=com.

Если вы можете создать DN из имеющегося у вас loginId, вы можете использовать ldapTemplate.lookup (String, AttributesMapper) метод, чтобы найти только один объект.

...