如何使用java

时间:2016-04-19 07:50:18

标签: java ldap jndi

我使用以下rdn创建了一个角色:

erglobalid=3224285689051620393,ou=roles,erglobalid=00000000000000000000,ou=org,dc=com

我删除了上述角色

现在,LDAP中不存在上述rdn。

但我想检查LDAP中是否存在?为此有什么方法吗?

我使用search()lookup()方法进行了检查,但是这些方法都抛出异常,因为根据我的应用程序的要求,我必须在catch块中编写代码并不理想< / p>

有人可以帮助我吗

1 个答案:

答案 0 :(得分:0)

  

我使用以下rdn创建了一个角色:

erglobalid=3224285689051620393,ou=roles,erglobalid=00000000000000000000,ou=org,dc=com

不,你没有。这是DN(专有名称),而不是RDN(相对专有名称)。 RDN的一部分是erglobalid=3224285689051620393.

  

我删除了上述角色

对你有好处。

  

现在,LDAP中不存在上述rdn。

以上 DN 在LDAP中不存在。

  

我想检查LDAP中是否存在?

它没有。你删除了它。如果删除失败,则会抛出异常。如果它没有失败,它就会被删除,所以它不存在。

  

有没有这样的方法?

是的,有search()lookup()方法。

  

我使用search()lookup()方法进行了检查,但是这些方法都抛出异常...因此,根据我的应用程序的要求,我必须在catch块中编写代码

正确。

  

哪个不理想

这些API的设计方式。厄运。你无能为力。如果没有匹配,NB search()不会抛出异常:它返回SearchResult的空枚举。

我想象你真正询问的是删除之前检查是否存在。这也是一个坏主意:它导致在服务器上进行两次查找而不是一次,并且是网络流量的两倍或更多......并且它会遇到时间窗口问题:它可能在您测试时存在而在您不存在时删除,或者更糟糕的是,它可能在您测试时不存在,但在删除时存在,或者您将被删除时存在。不要这样做。不要这样想。删除是一种原子操作,如果条目不存在则会失败。这正是你想要的。