2012-06-29 2 views
3

Я использую javax.naming.directory.DirContext для создания запроса LDAP для Active Directory. Этот запрос возвращает группы, членом которых является пользователь с заданным именем.DirContext: запрос Ldap Active Directory: получение групп пользователей с родительскими группами

hSearchControls searchCtls = new SearchControls(); 
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
searchCtls.setCountLimit(1); 
searchCtls.setReturningAttributes(new String[]{"memberOf"}); 
String searchFilter = MessageFormat.format("(sAMAccountName={0})", new Object[]{userName}); 
NamingEnumeration answer = null; 
try { 
    String hostDC = host.replaceAll("\\.", ",dc="); 
    adSearchRequestCr = adSearchRequestCr.replace("DL3", getDomainName(host, 3)); 
    adSearchRequestCr = adSearchRequestCr.replace("DL2", getDomainName(host, 2)); 
    adSearchRequestCr = adSearchRequestCr.replace("DL1", getDomainName(host, 1)); 
    answer = context.search(adSearchRequestCr, searchFilter, searchCtls); 
} 

Это прекрасно работает, но теперь мне нужно изменить этот запрос. Измененный запрос должен возвращать не только группу, в которой находится пользователь, но и родительские группы этой группы и т. Д. (Дерево групп). Я читал о LDAP_MATCHING_RULE_IN_CHAIN, но мне все еще не удалось его использовать.

Помогите с использованием LDAP_MATCHING_RULE_IN_CHAIN ​​или smth, чтобы получить новую цель запроса.

+0

Посмотрите на [Найти рекурсивное членство в группе (Active Directory) с помощью C#] (http://stackoverflow.com/a/6289205/608772) Я привел пример. – JPBlanc

+0

Наконец, я создал рекурсивный сам, не используя LDAP_MATCHING_RULE_IN_CHAIN. Во-первых, я получаю группы, членом которых является пользователь. Я извлекаю эти группы с атрибутом «memberOf» - этот атрибут содержит родительские группы. И затем я делаю такую ​​же операцию для родительских групп, пока мой поиск не будет завершен. Это работает быстро. – Robert

+0

@robert должен добавить его в качестве ответа и принять его, чтобы люди знали, что решение найдено. – Alfabravo

ответ

1

Наконец, я создал рекурсивный самостоятельно, не используя LDAP_MATCHING_RULE_IN_CHAIN. Во-первых, я получаю группы, членом которых является пользователь. Я извлекаю эти группы с атрибутом «memberOf» - этот атрибут содержит родительские группы. И затем я делаю такую ​​же операцию для родительских групп, пока мой поиск не будет завершен. Это работает быстро.

Смежные вопросы