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'