1

有人知道如何使用 java 从 LDAP 中删除组?以及验证该组是否为空的最佳方法是什么?

谢谢,

4

2 回答 2

3

LDAP 操作映射到 JNDI api。根据此处提供的规范:http: //docs.oracle.com/javase/tutorial/jndi/ldap/operations.html,您可以使用以下方法:

void destroySubcontext(String name) 抛出 NamingException

这应该破坏命名上下文并将其从命名空间中删除。

引用以下文档:

“此方法是幂等的。即使终端原子名称未绑定在目标上下文中,它也会成功,但如果任何中间上下文不存在,则抛出 NameNotFoundException。

在联合命名系统中,来自一个命名系统的上下文可能绑定到另一个命名系统中的名称。随后可以使用复合名称查找外部上下文并对其执行操作。但是,使用此复合名称破坏上下文的尝试将失败并出现 NotContextException,因为外部上下文不是它所绑定的上下文的“子上下文”。相反,使用 unbind() 删除外部上下文的绑定。销毁外部上下文需要对来自外部上下文的“本地”命名系统的上下文执行 destroySubcontext()。

参数: name - 要销毁的上下文的名称;不能为空”

于 2013-10-14T20:10:47.693 回答
1

使用 UnboundID LDAP SDK 建立与服务器的连接,然后创建一个删除请求,指定要删除的组的 DN。将删除请求传输到服务器并解释响应。

DeleteRequest deleteRequest =
    new DeleteRequest("cn=entry to delete,dc=example,dc=com");

try
{
  LDAPResult deleteResult = connection.delete(deleteRequest);

  System.out.println("The entry was successfully deleted.");
}
catch (LDAPException le)
{
  System.err.println("The delete operation failed.");
}

如果 LDAP 客户端希望“清空”组,我认为这意味着“删除条目中的所有属性,则可以构造 LDIF 以删除属性的所有值:

##
## assume 'member' is the attribute that whose values are members:
##
dn: cn=group1,ou=group,dc=example,dc=com
changetype: modify
replace: member 

没有值的“替换”将删除成员属性的所有值,无论是否存在任何值。没有值的“删除”会删除所有值,但必须至少有一个要删除。

一般来说,如果有选择的话,应该使用 UnboundID LDAP SDK 而不是 JNDI。

也可以看看

于 2013-10-14T20:30:32.753 回答