0

我有 LDAP 模式,用户在哪里。我需要删除一个名为“通知”的属性,该属性具有以下值:电话号码或邮件或从用户中删除属性。我找到了方法

LDAPConnection myCon = new LDAPConnection("localhost",389);
myCon.delete("uid=test1, ou=People, o=domain.com, o=isp");

但这会删除整个用户,我只需要删除该用户的一个属性“notifyTo”。我需要删除整个属性,而不仅仅是它的值。

谢谢您的回复

4

4 回答 4

2

您需要在 LDAPConnection 类上调用 modify 方法:-)

从javadocs:

public void modify(java.lang.String DN, LDAPModification mod) throws LDAPException 对目录中的现有条目进行一次更改(例如,更改属性的值、添加新的属性值或删除现有的属性值)。使用 LDAPModification 对象指定要进行的更改,使用 LDAPAttribute 对象指定要更改的属性值。LDAPModification 对象允许您添加属性值、更改属性值或删除属性值。

例如,以下代码部分将目录中 Barbara Jensen 的电子邮件地址更改为 babs@aceindustry.com。

来自 javadocs 的示例代码:

String myEntryDN = "cn=Barbara Jensen,ou=Product Development,o=Ace Industry,c=US";
LDAPAttribute attrEmail = new LDAPAttribute( "mail", "babs@aceindustry.com" );
LDAPModification singleChange = new LDAPModification( LDAPModification.REPLACE, attrEmail );

myConn.modify( myEntryDN, singleChange );

此示例用于删除条目属性之一的一个值。您需要删除所有值:-)

于 2010-04-06T15:06:48.970 回答
1

没有 Netscape API 的解决方案:

import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;
....
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
DirContext dctx = new InitialDirContext(env);
// next 3 lines only if authentication needed
dctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
dctx.addToEnvironment(Context.SECURITY_PRINCIPAL, "<userDN>");
dctx.addToEnvironment(Context.SECURITY_CREDENTIALS, "<password>");

Attributes attrs= new BasicAttributes();
Attribute attr= new BasicAttribute("<attrName>");
attrs.put(attr);
dctx.modifyAttributes ("<entryDN>", DirContext.REMOVE_ATTRIBUTE, attrs);
于 2010-04-06T15:29:34.993 回答
0

您可以在LDAPModificationSet中将该属性设置为LDAPModification.DELETE

如果属性是“notifyTo”,

LDAPConnection myCon = new LDAPConnection("localhost",389);
LDAPModificationSet mods = new LDAPModificationSet();
mods.add(LDAPModification.DELETE, new LDAPAttribute("notifyTo"));
myCon.modify("uid=test1, ou=People, o=domain.com, o=isp", mods);

您可以添加、替换或删除用户的任意数量的属性。所有这些都可以在要执行的 LDAPModificationSet 操作中指定。如果要替换用户的属性“email”,请将其添加到 LDAPModificationSet 并在最后调用 modify() 方法。

mods.add(LDAPModification.REPLACE, new LDAPAttribute("email","mytest@abc.com"));

删除属性时,只需确保该属性已存在于用户 LDAP 条目中,否则在调用 modify() 方法时会抛出 NO_SUCH_ATTRIBUTE(错误代码 16) LDAPException。

于 2012-10-11T13:34:43.903 回答
0

老问题但好问题,来自文档(Directory SDK for Java 4.0 Programmer's Guide)并补充了 SourceRebels 的回答:

要从条目中删除属性,您可以执行以下操作之一:

  • 用无值替换属性的值(构造无值的 LDAPAttribute 对象)
  • 指定要从属性中删除值,并且不指定值(构造不带值的 LDAPAttribute 对象)
  • 删除属性的所有值
于 2010-10-18T14:25:35.913 回答