2012-06-29 46 views
3

我使用javax.naming.directory.DirContext爲Active Directory創建LDAP請求。此請求返回具有給定名稱的用戶所屬的組。DirContext:Active Directory Ldap請求:獲取具有父組的用戶組

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或類似的smith來獲取請求的新目標。

+0

看看[使用C#查找遞歸組成員(Active Directory)](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」檢索這個組 - 這個屬性包含父組。然後我對父組進行相同的操作,直到搜索完成。這工作很快。

相關問題