1

在 Spring LDAP 中使用LdapTemplate,我有以下代码:

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
}

但是自从我读过我的 Joshua Bloch 之后,我知道异常不应该用于控制流。有没有办法查找 dn 以查看它是否存在而不抛出异常,如果不存在?应该有,但是找不到 我正在寻找像这样(或类似)工作的代码:

String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
Object object=this.ldapTemplate.someMethod(dn);
if(object==null){
    // create Object
}

有人可以帮忙吗?

顺便说一句:只看 JavaDoc 没有帮助。NameNotFoundExceptionJavaDocs 中没有一个抛出的方法这么说。

4

2 回答 2

8

lookup()仅当您确定 DN 存在时才应该使用该方法。这通常是因为您之前搜索并找到了用户或组,并缓存了从服务器返回的 DN。

如果您正在寻找可能存在或不存在的东西,那么使用正确的 API 是ldapTemplate.search(),并带有适当的过滤器。这会返回一个结果列表,如果没有找到结果,它会返回一个空列表而不是抛出异常。

于 2011-06-22T11:16:15.983 回答
2

实际上,Spring 强制您在这里使用异常来进行流控制(即,这不是您的错,这是他们的决定)。

几个月前我与 LdapTemplate 一起工作,我找不到更好的方法,然后捕获该异常并将该情况评估为“未找到用户”。

于 2010-10-01T14:42:41.643 回答