有人知道如何使用java从LDAP中删除组?验证这个组是空的最佳方法是什么?
谢谢,
答案 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。