Да, проблема в том, что количество пользователей в вашем запросе ldapContext.search
будет расти экспоненциально, поэтому он вообще не масштабируется. Например, 1-й запрос предназначен для 1 пользователя, 2-й запрос - для 3 пользователей, 3-й запрос для 9 пользователей и т. Д.
Пользователи, относящиеся к одному пользователю, можно увидеть в виде дерева (если нет циклы). Наиболее распространенный способ обхода дерева - это алгоритм глубокого поиска (DFS) или поиска по хлебу (BFS). Если ваша цель - найти ВСЕ пользователей, связанных с пользователем, тогда подойдет любой вариант.
DFS (или BFS) более масштабируемый, чем ваше решение, потому что он всегда будет запрашивать LDAP с 1 пользователя за раз.
Я не могу протестировать ваш метод, но я показываю вам, как можно реализовать DFS:
// ...
accumlatedUsers.addAll(usersFounded);
for(String userFounded : usersFounded){
if(!visited.contains(userFounded)){
visited.add(userFounded);
List<String> singleUserList = new ArrayList<>();
singleUserList.add(userFounded);
this.GetSubordinatesRecurisve(singleUserList, accumlatedUsers);
}
}
return;
Примечание список посещенных, он предназначен для предотвращения циклы в вашем графике пользователей.