Spring Ldap: Lookup dn без исключения, если его нет - PullRequest
1 голос
/ 01 октября 2010

Используя LdapTemplate в Spring 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.

Ответы [ 2 ]

7 голосов
/ 22 июня 2011

Метод lookup() предполагается использовать только тогда, когда вы точно знаете, что DN существует. Обычно это происходит из-за того, что вы ранее искали и находили пользователя или группу и кэшировали DN, возвращенное с сервера.

Если вы ищете что-то, что может быть, а может и нет, правильный API для использования - ldapTemplate.search() с соответствующим фильтром. Это возвращает список результатов, и в случае, если никаких результатов не найдено, возвращается пустой список, а не выдается исключение.

2 голосов
/ 01 октября 2010

На самом деле, Spring заставляет вас использовать исключения для управления потоком (т.е. это не ваша ошибка, это их решение).

Я работал с LdapTemplate несколько месяцев назад, и я не смог найти ничего лучше, чем пойматьэто исключение и оцените эту ситуацию как «Пользователь не найден».

...