Java Netscape LDAP Удалить один атрибут - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть схема LDAP, где находятся пользователи. Мне нужно удалить один атрибут с именем «уведомить», который имеет значения: номер телефона или почты или удалить атрибут от пользователя. Я нашел способ

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

но это удаляет всего пользователя, и мне нужно удалить только один атрибут "notifyTo" этого пользователя. Мне нужно удалить весь атрибут, а не только его значение.

Спасибо за ответ

Ответы [ 4 ]

2 голосов
/ 06 апреля 2010

Вам необходимо вызвать метод изменения класса LDAPConnection : -)

Из Javadocs:

public void modify (java.lang.String DN, Модификация LDAP) throws LDAPException Вносит одно изменение в существующую запись в каталоге (например, изменения значение атрибута, добавляет новый Значение атрибута или удаляет существующее значение атрибута). Использовать Объект LDAPModification для указания изменить, чтобы сделать и атрибут LDAP объект для указания значения атрибута изменить. Объект LDAPModification позволяет добавить значение атрибута, изменить значение атрибута или удалить значение атрибута.

Например, следующий раздел изменения кода электронной почты Барбары Дженсен адрес в каталоге 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 голос
/ 06 апреля 2010

Решение без 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);
0 голосов
/ 11 октября 2012

Вы можете установить этот атрибут как LDAPModification.DELETE в LDAPModificationSet

Если атрибут "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).

0 голосов
/ 18 октября 2010

Старый вопрос, но хороший вопрос из документации ( Каталог SDK для Руководства программиста по Java 4.0 ) и дополнения ответа SourceRebels:

Чтобы удалить атрибут из записи, вы можете выполнить одно из следующих действий:

  • заменить значения атрибута без значений (создайте объект LDAPAttribute без значений)
  • укажите, что вы хотите удалить значение из атрибута, и не указывайте значение (создайте Объект LDAPAttribute без значений)
  • удалить все значения атрибута
...