2016-09-14 22 views
0

私のLDAPに新しいユーザーエントリを追加する必要があります。以下の私のコードです:ユーザーをLDAPに追加する際のLdapエラーコード32

 javax.naming.Name name = new DistinguishedName("cn=" + userName +",ou=Users,dc=wso2,dc=org"); 


    Attribute objectClass = new BasicAttribute("objectClass"); 
     { 
     objectClass.add("top"); 
     objectClass.add("inetOrgPerson"); 
     objectClass.add("person"); 
     objectClass.add("organizationalPerson"); 
     } 
     Attributes userAttributes = new BasicAttributes(); 
     userAttributes.put(objectClass); 
     userAttributes.put("cn", userName); 
     userAttributes.put("sn", "abctest"); 
     userAttributes.put(ATTRIBUTE_USER_PASSWORD, password); 
     LdapTemplate ldapTemplate = (LdapTemplate) SpringBeanFactory 
       .getBean("ldapTemplate"); 
     ldapTemplate.bind(name, null, userAttributes); 

コードのこの部分が実行されたときに、私は次の例外を取得しますが:

org.apache.cxf.interceptor.Fault: [LDAP: error code 32 - No Such Object];  
nested exception is javax.naming.NameNotFoundException: 
[LDAP: error code 32 -  No Such Object]; remaining name 'cn=myname,ou=Users,dc=wso2,dc=org' 

私はコードをhttp://kaustuvmaji.blogspot.in/2014/12/simple-example-of-spring-ldap.htmlで指定された例を以下しています。このエラーや正しいコードの根本原因を理解するのに助けてくれる人がいますか?

答えて

1

ここで問題となるのは、パスou=Users,dc=wso2,dc=orgがLDAPツリーに存在しないため、そのパスに子を作成できないということです。

ContextSourceのベースパスを指定した場合、コード内のすべてのDNから省略する必要があります。すべてのパスは指定されたベースに対して相対的なものになります。

+0

Apache Directory Studioを使用してLDAPツリー自体からパスを取得しました。たとえば、別の既存のエントリはDN = "cn = newName、ou = Users、dc = wso2、dc = org"です。パス内の用語の大文字/小文字は問題になりますか?パスを確認する方法はありますか? –

+0

基本パスのヒントを更新しました – marthursson

+0

ありがとう@marthursson !! DNからベースパスを削除すると私にとってはうまくいった。 –

関連する問題