Може да има много отговори. Един възможен отговор е да се конструира базово 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