如何使用java从LDAP中删除组?

时间:2013-10-14 19:58:44

标签: java ldap

有人知道如何使用java从LDAP中删除组?验证这个组是空的最佳方法是什么?

谢谢,

2 个答案:

答案 0 :(得分:2)

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

void destroySubcontext(String name)抛出NamingException

哪个应该销毁命名上下文并将其从命名空间中删除。

从以下文档中引用:

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

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

参数:     name - 要销毁的上下文的名称;可能不是空的“

答案 1 :(得分:2)

使用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 

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

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

另见