Spring LDAP: поиск DN без броска исключения, если это не там
-
27-09-2019 - |
Вопрос
С использованием Ldaptemplate Весной ldap у меня есть этот код:
Object object=null;
try{
String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
object = this.ldapTemplate.lookup(dn);
} catch(final NameNotFoundException e){
// create Object
}
Но так как я прочитал мою джошуа, я знаю, что исключения не должны использоваться для контрольного потока. Есть ли способ посмотреть DN, чтобы увидеть, существует ли он, не бросая исключение, если это не так? Должно быть, я не могу его найти. Я ищу код, который работает так (или похоже):
String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
Object object=this.ldapTemplate.someMethod(dn);
if(object==null){
// create Object
}
Может кто-нибудь помочь?
Кстати: просто глядя на Javadoc, не поможет. Ни один из методов, которые бросают NameNotFoundException
Скажи так в Javadocs.
Решение
То lookup()
Метод должен использоваться только тогда, когда вы точно знаете, что DN существует. Это обычно потому, что вы искали и нашли пользователь или группу ранее, и кэшировали DN, возвращенный с сервера.
Если вы ищете то, что может или не может быть там, правильная API для использования ldapTemplate.search()
, с подходящим фильтром. Это возвращает список результатов, и в случае, когда результаты не обнаружены, он возвращает пустой список, а не выбрасывать исключение.
Другие советы
На самом деле, весна заставляет вас здесь использовать исключения для управления потоком (т. Е. Это не ваша ошибка, это их решение).
Я работал с Ldaptemplate несколько месяцев назад, и я не мог найти ничего лучшего, а затем поймать это исключение и оценить эту ситуацию как «пользователь не найден».