2008-10-09 46 views
1

我需要能夠使用Java類更新OpenLDAP上的屬性。使用Java類更新OpenLDAP

我試圖創建一個LDAP條目,但它看起來像一個Java對象而不是正確的LDAP條目。 (Grrrr)

 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.naming.NameAlreadyBoundException; 
import javax.naming.directory.*; 
import java.util.*; 

public class TestLDAP { 
     static final long serialVersionUID = -1240113639782150930L; 

     final static String ldapServerName = "localhost:636"; 
     final static String rootdn = "cn=The Manager,ou=mydept,o=mycompany"; 
     final static String rootpass = "password"; 
     final static String rootContext = "ou=mydept,o=mycompany"; 

     public static void main(String[] args) { 
      System.setProperty("javax.net.ssl.trustStore", "C:\\cacerts"); 


       Properties env = new Properties(); 
       env.put("com.sun.jndi.ldap.trace.ber", System.out); 
       env.put(Context.INITIAL_CONTEXT_FACTORY, 
         "com.sun.jndi.ldap.LdapCtxFactory"); 
       env.put(Context.SECURITY_PROTOCOL, "ssl"); 
       env.put(Context.PROVIDER_URL, "ldap://" + ldapServerName + "/" + rootContext); 
       env.put(Context.SECURITY_PRINCIPAL, rootdn); 
       env.put(Context.SECURITY_CREDENTIALS, rootpass); 

       try { 
         // obtain initial directory context using the environment 
         DirContext ctx = new InitialDirContext(env); 

         // add LDAP entry 
         Attributes myAttrs = new BasicAttributes(true); 
         Attribute oc = new BasicAttribute("objectclass"); 

         oc.add("inetOrgPerson"); 
         oc.add("organizationalPerson"); 
         oc.add("person"); 
         oc.add("top"); 
         myAttrs.put(oc); 
         myAttrs.put("cn","test996"); 
         myAttrs.put("sn","test 996"); 

         ctx.bind("cn=test997", myAttrs); 
       } catch (NameAlreadyBoundException nabe) { 
         System.err.println("value has already been bound!"); 
       } catch (Exception e) { 
         e.printStackTrace(); 
       } 
     } 
} 

Pleaseee help!

回答

4

自從我使用LDAP以來已經有一段時間了,但是看着Javadoc我認爲你使用的是錯誤的方法。嘗試類似:

ctx.bind("cn=test997", null, myAttrs); 

您是否閱讀過LDAP tutorial?當我不得不做一些LDAP工作時,我發現這很有幫助。

+0

LDAP教程...是。谷歌提出的第一個地方之一。不幸的是,沒有喜悅。沒有信息來解決問題。無論如何,我很接近解決問題。一旦完成,我將發佈解決方案。 – magius 2008-10-09 23:15:51