Поиск ldap в java - поиск всех групп с определенным пользователем в нем - PullRequest
0 голосов
/ 10 мая 2011

Учитывая нижеприведенную структуру ldap (более или менее)

C=NO
-o=mydomain
--cn=groups
---cn=group1
----uid=bob,cn=users,o=mydomain,C=NO
---cn=group2
----uid=bob,cn=users,o=mydomain,C=NO
----uid=odd,cn=users,o=mydomain,C=NO
--cn=users
---uid=bob,cn=Robert,sn=Johnsen
---uid=odd,cn=Odd,sn=Olsen

Я использую следующий url = ldap: // сервер: порт / o = mydomain, C = NO

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

NamingEnumeration results = ctx.search("cn=groups", "cn=*", constraints);

, где ограничения

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

Однако я хотел бы получить только группы с определенным пользователем в нем. Я перепробовал множество вариантов типа

        NamingEnumeration results = ctx.search("cn=groups"
                , "(&(uid={0},cn=users,o=fund,C=NO)(cn=*))"
                        , new Object[] {"odd"}
                        , constraints);

но я получаю только пустые результаты. Кажется все или ничего ... Я подозреваю, что проблема в том, что cn = * и uid = odd находятся на разных уровнях дерева, например. uid = является атрибутом, но cn = * является ли узел на один уровень выше?

Как мне выполнить этот поиск более эффективным способом, чем просто получить все и проанализировать его на стороне клиента?

1 Ответ

0 голосов
/ 10 мая 2011

Ваша структура LDAP выглядит странно.

Что такое класс объектов типа cn=group1?Это «организационный узел» или «группа»?

В обычных каталогах пользователи создаются под объектами на основе класса «организационный блок», а для административных нужд они группируются в атрибуте, называемом «членом» объектов объекта.класс "группа".

В этом случае фильтр LDAP будет выглядеть следующим образом:

(&(objectClass=group)(member=uid={0},cn=users,o=fund,C=NO))

В описываемой вами архитектуре вы можете взглянуть на функцию под названием ExtensibleMatch который, кажется, правильно объяснен в этой статье вики .

...