【发布时间】:2019-07-11 23:03:20
【问题描述】:
我发现没有什么对我有用。而且我很难找到具有有效代码的答案,而不是简单地粘贴来自另一个站点的搜索过滤器字符串。
尝试进行搜索的相关代码是:
SearchResult sr = executeSearchSingleResult(ctx, SearchControls.SUBTREE_SCOPE, "dc=mydomain,dc=local", "(&(objectClass=person)(sAMAccountName=admin2))", new String[]{"memberOf"});
if (sr != null) {
Attribute memberOf = sr.getAttributes().get("memberOf");
if (memberOf != null) {
for (int i = 0; i < memberOf.size(); i++) {
Attributes attributes = ctx.getAttributes(memberOf.get(i).toString(), new String[]{"CN"});
Attribute attribute = attributes.get("CN");
if (attribute != null) {
log.info("member of : " + attribute.get(0));
}
}
for (Enumeration e1 = memberOf.getAll(); e1.hasMoreElements();) {
String unprocessedGroupDN = e1.nextElement().toString();
String unprocessedGroupCN = getCN(unprocessedGroupDN);
//checking something here
}
}
}
private static SearchResult executeSearchSingleResult(DirContext ctx, int searchScope, String searchBase, String searchFilter, String[] attributes) throws NamingException {
NamingEnumeration result = executeSearch(ctx, searchScope, searchBase, searchFilter, attributes);
SearchResult sr = null;
try {
while (result.hasMoreElements()) {
sr = (SearchResult) result.next();
break;
}
} catch (Exception e) {
log.error(e, e);
}
return sr;
}
private static NamingEnumeration executeSearch(DirContext ctx, int searchScope, String searchBase, String searchFilter, String[] attributes) throws NamingException {
SearchControls searchCtls = new SearchControls();
if (attributes != null) {
searchCtls.setReturningAttributes(attributes);
}
searchCtls.setSearchScope(searchScope);
NamingEnumeration result = ctx.search(searchBase, searchFilter, searchCtls);
return result;
}
当没有嵌套组时,这可以正常工作。但是假设我有以下组和用户结构:
My Admins (dn = CN=My Admins,CN=Users,DC=mydomain,DC=local)
AdminUser1 (dn = CN=AdminUser 1,CN=Users,DC=mydomain,DC=local)
AdminGroup1 (dn = CN=AdminGroup 1,CN=Users,DC=,mydomain,DC=local)
AdminUser2 (dn = CN=AdminUser 2,CN=Users,DC=mydomain,DC=local)
这发现 AdminUser1 就好了。它找不到 AdminUser2。我需要做的是发现 AdminUser2 一直返回到名为 My Admins 的最高级别组。
我发现了很多对 1.2.840.113556.1.4.1941 的引用,但将其放入搜索过滤器的不同方法没有帮助。
我需要在代码和/或搜索过滤器中进行哪些更改以收集处于任何特定组嵌套深度的特定用户一直回到最顶层组?
【问题讨论】:
标签: java active-directory ldap