Ответов может быть много. Одним из возможных ответов является создание базового DN с использованием участника и запрос к серверу каталогов с использованием области base
, фильтра '(&)'
и запроса атрибута isMemberOf
. Например, в моей тестовой системе с использованием современного инструмента командной строки ldapsearch
и принципала user.0
:
ldapsearch --hostname localhost --port 1389 \
--bindDN 'cn=directory manager' --baseDn \
'uid=user.0,ou=people,dc=example,dc=com' \
--searchScope base '(&)' isMemberOf
Password for user 'cn=directory manager':
dn: uid=user.0,ou=people,dc=example,dc=com
isMemberOf: cn=shadow entries,ou=groups,dc=example,dc=com
isMemberOf: cn=persons,ou=groups,dc=example,dc=com
Этот метод требует знания namingContext
, в данном случае dc=example,dc=com
, и того, где пользователи находятся в дереве. Другой аналогичный метод, когда местоположение пользователя неизвестно, заключается в том, чтобы сначала найти пользователя, а затем использовать отличительное имя из результатов поиска для выполнения вышеуказанного запроса. Если namingContext
неизвестно, можно обнаружить namingContext
из корневой DSE. Чтобы восстановить namingContext
из корневой DSE, см. этот статья.
Есть некоторые широко используемые серверы каталогов, которые неправильно поддерживают стандарт LDAP и будут отвергать фильтр '(&)'
, если ваш сервер каталогов является одним из них, просто замените фильтр присутствия '(objectClass=*)'
. Существует множество LDAP SDK для Java, я предпочитаю тот, что находится на UnboundID.
person
Terry Gardner
schedule
05.08.2011