Spring LDAP: поиск DN без броска исключения, если это не там

StackOverflow https://stackoverflow.com/questions/3840191

  •  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 несколько месяцев назад, и я не мог найти ничего лучшего, а затем поймать это исключение и оценить эту ситуацию как «пользователь не найден».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top