In the previous chapter we discussed adding attribute to existing LDAP entry. In Java application involving LDAP access it is often required to add LDAP entries from Java application itself.This chapter discusses the way of adding LDAP entry using JNDI . Our application is creating an LDAP user entry with all the necessary attributes.
Adding LDAP entry using JNDI
We discussed the way by which we are creating user entries using Apache Directory Studio before.There we created one user. In the coming example we will see how to add one user from our Java application. The important attributes of existing users will be displayed before adding the new user. After the addition of new user , the new set of users also will be displayed.
Now see the Java code.
AddLDAPSample.java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class AddLDAPSample {
public AddLDAPSample() {
}
public void addEntry() {
Properties initilaProperties = new Properties();
initilaProperties.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
initilaProperties.put(Context.PROVIDER_URL, "ldap://localhost:10389");
initilaProperties
.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
initilaProperties.put(Context.SECURITY_CREDENTIALS, "secret");
try {
DirContext context = new InitialDirContext(initilaProperties);
System.out.println("Existing users in ou=users , ou=system");
listEntries(context);
System.out.println("Adding new user..");
addUser(context);
System.out.println("New list of users...");
listEntries(context);
context.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
public void addUser(DirContext context) {
Attributes attributes = new BasicAttributes();
Attribute attribute = new BasicAttribute("objectClass");
attribute.add("inetOrgPerson");
attributes.put(attribute);
Attribute sn = new BasicAttribute("sn");
Attribute cn = new BasicAttribute("cn");
sn.add("Karthik");
cn.add("users");
attributes.put(sn);
attributes.put(cn);
attributes.put("telephoneNumber", "777777777");
try {
context.createSubcontext(
"employeeNumber= 333333,ou=users,ou=system", attributes);
} catch (NamingException e) {
e.printStackTrace();
}
}
public void listEntries(DirContext context) {
String searchFilter = "(objectClass=inetOrgPerson)";
String[] requiredAttributes = { "employeeNumber", "cn",
"telephoneNumber" };
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(requiredAttributes);
NamingEnumeration users;
try {
users = context
.search("ou=users,ou=system", searchFilter, controls);
SearchResult searchResult = null;
String commonName = null;
String empNumber = null;
String telephoneNumber = null;
while (users.hasMore()) {
searchResult = (SearchResult) users.next();
Attributes attr = searchResult.getAttributes();
commonName = attr.get("cn").get(0).toString();
empNumber = attr.get("employeeNumber").get(0).toString();
telephoneNumber = attr.get("telephoneNumber").get(0).toString();
System.out.println("Name = " + commonName);
System.out.println("Employee Number = " + empNumber);
System.out.println("Phone Number = " + telephoneNumber);
}
} catch (NamingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
AddLDAPSample sample = new AddLDAPSample();
sample.addEntry();
}
}
Compile and run the code.Now lets see the output. Before running the code ,I had one user record created before . So after running the above application there will be two user records.
Output
Existing users in ou=users , ou=system
Name = Bijoy
Employee Number = 112233
Phone Number = 99999999999
Adding new user..
New list of users…
Name = Bijoy
Employee Number = 112233
Phone Number = 99999999999
Name = users
Employee Number = 333333
Phone Number = 777777777
So new user has been successfully added.
See also:
Naming Service example using JBossNS.
Update attributes of LDAP entries using JNDI
Add attribute to LDAP entries using JNDI