在 LDAP 中输入搜索词时检索所有子用户
Retrieve all sub users when entered a search term in LDAP
我正在寻找一个查询,当输入一个名字时,它应该检查是否有任何子雇员向输入的名字报告。如果有的话,那么它应该 return 所有子用户(员工)和向该员工报告的子子用户列表。
我写了一个查询,当输入一个用户名时,它得到了所有与他相关的数据,但我现在很困惑如何只得到用户&子用户&报告该搜索词的子子用户名。
有没有办法用 AD 来做,或者我需要实现 DFS 搜索吗?如果有任何一种选择,请给我一些提示。
try {
// Create Initial Context
LdapContext ctxGC = new InitialLdapContext(env, null);
// ctxGC.setRequestControls(null);
String searchFilter = "(&(objectClass=user)(sAMAccountName=" + searchTerm + ")(!(displayName=ADM*)))";
NamingEnumeration<?> namingEnum = ctxGC.search("OU=User,DC=emea,DC=xyz,DC=biz", searchFilter, getSearchControls());
Deque<Node> stack = new ArrayDeque<Node>(); // Do I need to implement tree here or is there any other way to get sub users info from LDAP search??
while (namingEnum.hasMoreElements()) {
SearchResult result = (SearchResult) namingEnum.next();
Attributes attrs = result.getAttributes();
if (attrs != null) {
NamingEnumeration ne = attrs.getAll();
while (ne.hasMore()) {
Attribute attr = (Attribute) ne.next();
}
}
}
namingEnum.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static SearchControls getSearchControls() {
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchCtls.setReturningAttributes(new String[]{"*"});
return searchCtls;
}
要获取向经理报告的用户列表,我只需要更改搜索过滤器查询并检索经理凭据,然后它 returns 向该人报告的所有用户的列表。如果没有用户向他报告,那么它 returns 没有。
因此,searchFilter
需要像下面这样更改。
String searchFilter = "(&(objectClass=user)(manager=CN=Its\\, Zaif,OU=xx,OU=xx,OU=StandardUser,OU=xx,DC=emea,DC=xyz,DC=biz) (!(displayName=ADM*)))";
我正在寻找一个查询,当输入一个名字时,它应该检查是否有任何子雇员向输入的名字报告。如果有的话,那么它应该 return 所有子用户(员工)和向该员工报告的子子用户列表。
我写了一个查询,当输入一个用户名时,它得到了所有与他相关的数据,但我现在很困惑如何只得到用户&子用户&报告该搜索词的子子用户名。
有没有办法用 AD 来做,或者我需要实现 DFS 搜索吗?如果有任何一种选择,请给我一些提示。
try {
// Create Initial Context
LdapContext ctxGC = new InitialLdapContext(env, null);
// ctxGC.setRequestControls(null);
String searchFilter = "(&(objectClass=user)(sAMAccountName=" + searchTerm + ")(!(displayName=ADM*)))";
NamingEnumeration<?> namingEnum = ctxGC.search("OU=User,DC=emea,DC=xyz,DC=biz", searchFilter, getSearchControls());
Deque<Node> stack = new ArrayDeque<Node>(); // Do I need to implement tree here or is there any other way to get sub users info from LDAP search??
while (namingEnum.hasMoreElements()) {
SearchResult result = (SearchResult) namingEnum.next();
Attributes attrs = result.getAttributes();
if (attrs != null) {
NamingEnumeration ne = attrs.getAll();
while (ne.hasMore()) {
Attribute attr = (Attribute) ne.next();
}
}
}
namingEnum.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static SearchControls getSearchControls() {
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchCtls.setReturningAttributes(new String[]{"*"});
return searchCtls;
}
要获取向经理报告的用户列表,我只需要更改搜索过滤器查询并检索经理凭据,然后它 returns 向该人报告的所有用户的列表。如果没有用户向他报告,那么它 returns 没有。
因此,searchFilter
需要像下面这样更改。
String searchFilter = "(&(objectClass=user)(manager=CN=Its\\, Zaif,OU=xx,OU=xx,OU=StandardUser,OU=xx,DC=emea,DC=xyz,DC=biz) (!(displayName=ADM*)))";