1

DirContext ldapContext;

String baseName = "dc=MyCompany,dc=com";

String serverIP = "xx.xxx.xxx.xxx";

public ADConnection() {

try {

  Hashtable ldapEnv = new Hashtable(11);

  ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

  ldapEnv.put(Context.PROVIDER_URL,  "ldap://xx.xx.xx.xx:389");

  ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");

  ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");

  ldapEnv.put(Context.SECURITY_CREDENTIALS, "xxxx");

  ldapContext = new InitialDirContext(ldapEnv);

  System.out.println(ldapContext);



 }
  catch (Exception e) {

    System.out.println(" bind error: " + e);

    e.printStackTrace();

    System.exit(-1);

 }

}



  public void createNew(String username, String surname, String givenName) {

    try {

      String distinguishedName = "cn=" + username + baseName;

      Attributes newAttributes = new BasicAttributes(true);

      Attribute oc = new BasicAttribute("objectclass");

      oc.add("top");

      oc.add("person");

      oc.add("organizationalperson");

      oc.add("user");

      newAttributes.put(oc);

      newAttributes.put(new BasicAttribute("sAMAccountName", username));

      newAttributes.put(new BasicAttribute("userPrincipalName", username + "@" + serverIP));

      newAttributes.put(new BasicAttribute("cn", username));

      newAttributes.put(new BasicAttribute("sn", surname));

      newAttributes.put(new BasicAttribute("givenName", givenName));

      newAttributes.put(new BasicAttribute("displayName", givenName + " " + surname));

      System.out.println("Name: " + username + " Attributes: " + newAttributes);

      ldapContext.createSubcontext(distinguishedName, newAttributes);

    }
    catch (Exception e) {

      System.out.println("create error: " + e);

      e.printStackTrace();

      System.exit(-1);

    }

  }



  public Attributes fetch(String username) {

    Attributes attributes = null;

    try {
      System.out.println("fetching: " + username);

      DirContext o = (DirContext)ldapContext.lookup("cn=" + username+ baseName);

      System.out.println("search done\n");

      attributes = o.getAttributes("");

      for (NamingEnumeration ae = attributes.getAll(); ae.hasMoreElements();) {


        Attribute attr = (Attribute)ae.next();

        String attrId = attr.getID();

        for (NamingEnumeration vals = attr.getAll(); vals.hasMore();) {

          String thing = vals.next().toString();

          System.out.println(attrId + ": " + thing);

        }
      }
    }
    catch (Exception e) {

      System.out.println(" fetch error: " + e);

      System.exit(-1);
    }
    return attributes;
  }

    public static void main(String[] args) {


    adc.createNew("user1,", "User", "user1");

    Attributes a = adc.fetch("user1,");
  }

  

ユーザーの作成中およびユーザーの取得後、コンソールで以下のエラーが表示されます。

javax.naming.directory.InitialDirContext@18eb9e6

名前: user1、属性: {displayname=displayName: user1 ユーザー、givenname=givenName: user1、

objectclass=objectclass: トップ、人、組織人、ユーザー、

samaccountname=sAMAccountName: user1、sn=sn: ユーザー、userprincipalname=userPrincipalName:

user1,@xx.xxx.xxx.xxx, cn=cn: user1,}

作成エラー: javax.naming.NameNotFoundException: [LDAP: エラー コード 32 - 提供されたエントリ

cn=user1,dc=MyCompany,dc=com は、そのサフィックスが次のいずれかとして定義されていないため、追加できません。

ディレクトリ サーバー内のサフィックス]; 残りの名前 'cn=user1,dc=MyCompany,dc=com'

javax.naming.NameNotFoundException: [LDAP: エラーコード 32 - 提供されたエントリ

cn=user1,dc=MyCompany,dc=com は、そのサフィックスが次のいずれかとして定義されていないため、追加できません。

ディレクトリ サーバー内のサフィックス]; 残りの名前 'cn=user1,dc=MyCompany,dc=com'

4

1 に答える 1

0

のバックエンドはdc=mycompany,dc=com存在しますか? そうでない場合は、それを作成し、少なくともベース オブジェクトを設定する必要がありますdc=mycompany,dc=com

于 2012-07-30T16:13:38.380 に答える