2010-04-06 55 views
0

我有LDAP架構,用戶在哪裏。我需要刪除一個名爲「notify」的屬性,它具有值:電話號碼或郵件或從用戶中刪除屬性。我發現方法Java Netscape LDAP刪除一個屬性

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

但這刪除整個用戶,我需要刪除只有一個屬性「notifyTo」這個用戶。我需要刪除整個屬性不僅僅是它的價值。

感謝您的回覆

+0

你爲什麼使用Netscape API?從JDK 1.3(〜2000)開始,LDAP集成在J2SE中的javax.naming.directory包中。 – 2010-04-06 15:18:02

回答

2

你需要調用modify method on LDAPConnection class :-)

從的javadoc:

公共無效修改(java.lang.String中 DN, LDAPModification MOD) 拋出LDAPException對目錄中的現有條目 進行單個更改(例如,更改 屬性的值,添加新的 屬性值,或刪除 現有屬性值)。使用 LDAPModification對象指定要更改的 和LDAPAttribute 對象以指定要更改的屬性值 。 LDAP修改對象 允許您添加屬性值, 更改屬性值或刪除 屬性值。

例如, 下面的一段代碼更改目錄中的芭芭拉·詹森的電子郵件 地址 [email protected]。從的javadoc

示例代碼:

String myEntryDN = "cn=Barbara Jensen,ou=Product Development,o=Ace Industry,c=US"; 
LDAPAttribute attrEmail = new LDAPAttribute("mail", "[email protected]"); 
LDAPModification singleChange = new LDAPModification(LDAPModification.REPLACE, attrEmail); 

myConn.modify(myEntryDN, singleChange); 

此示例是刪除您條目的屬性之一的一個值。您需要刪除的所有值:-)

1

解決方案,而網景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

老問題,但很好的問題,從文檔(Directory SDK for Java 4.0 Programmer's Guide)和補充SourceRebels'回答:

要從條目中刪除屬性,可以執行以下操作之一:

  • 替換屬性值的機智H無值(構造不值LDAPAttribute對象)
  • 指定要刪除該屬性的值,並沒有指定值(構建無值 LDAPAttribute對象)
  • 刪除屬性的所有值
0

您可以將該屬性設置爲LDAPModification。刪除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","[email protected]")); 

雖然刪除的屬性,只要確保該屬性已經存在於用戶LDAP條目,否則當修改NO_SUCH_ATTRIBUTE(錯誤代碼16)LDAPException將會被拋出()方法被調用。