【发布时间】:2020-07-12 07:18:26
【问题描述】:
我有一个问题,我必须使用自定义 LDAP 属性获取与用户相关的所有用户,现在我只能通过使用带有查询的递归函数来实现这一点,每次调用都会不断增长,我知道这一点不会扩展,有没有更好的方法来实现这一点。
这是我使用的代码。
/*
* at start accumlatedUsers === usersToBeSearched accumlatedUsers will be
* updated
*/
public void GetSubordinatesRecurisve(ArrayList<String> usersToBeSearched, ArrayList<String> accumlatedUsers)
throws NamingException {
String searchFilter = "(&(ObjectCategory=User)(|";
for (String user : usersToBeSearched) {
searchFilter += "(supeirorName=" + user + ")";
}
searchFilter += "))";
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ldapContext.search(ldapSearchBase, searchFilter, searchControls);
ArrayList<String> usersFounded = new ArrayList<String>();
SearchResult searchResult = null;
while (results.hasMoreElements()) {
searchResult = (SearchResult) results.nextElement();
usersFounded.add((String) searchResult.getAttributes().get("sAMAccountName").get());
}
accumlatedUsers.addAll(usersFounded);
if (usersFounded.size() != 0) {
this.GetSubordinatesRecurisve(usersFounded, accumlatedUsers);
}
return;
}
谢谢。
【问题讨论】:
标签: java active-directory ldap