0

ユーザーがいる LDAP スキーマがあります。電話番号またはメールの値を持つ「通知」という名前の属性を1つ削除するか、ユーザーから属性を削除する必要があります。方法を見つけた

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

しかし、これはユーザー全体を削除し、このユーザーの「notifyTo」属性を1つだけ削除する必要があります。値だけでなく、属性全体を削除する必要があります。

返信ありがとう

4

4 に答える 4

2

LDAPConnection クラスで変更メソッドを呼び出す必要があります:-)

javadoc から:

public void modify(java.lang.String DN, LDAPModification mod) throws LDAPException ディレクトリ内の既存のエントリに 1 つの変更を加えます (たとえば、属性値の変更、新しい属性値の追加、既存の属性値の削除など) )。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 );

このサンプルは、エントリの属性の 1 つの値を 1 つ削除するためのものです。すべての値を削除する必要があります:-)

于 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(Error Code 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 に答える