import java.util.Hashtable;
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.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.LdapContext;
public class LdapbyUser {
String root = "dc=example,dc=com";
public LdapbyUser(String dn,String employeeID) {
modifyInformation(dn,employeeID);
Hashtable env = new Hashtable();
String LDAP_URL = "ldap://xxxx:389";
String adminName = "example\\user";
String adminPassword = "userpassword";
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, LDAP_URL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, adminName);
env.put(Context.SECURITY_CREDENTIALS, adminPassword);
dc = new InitialDirContext(env);
System.out.println("认证成功");
} catch (javax.naming.AuthenticationException e) {
System.out.println("认证失败");
System.out.println("认证出错:" + e);
public void add(String newUserName) {
BasicAttributes attrs = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectClass");
objclassSet.add("sAMAccountName");
objclassSet.add("employeeID");
attrs.put("ou", newUserName);
dc.createSubcontext("ou=" + newUserName + "," + root, attrs);
System.out.println("Exception in add():" + e);
public void delete(String dn) {
dc.destroySubcontext(dn);
System.out.println("Exception in delete():" + e);
public boolean renameEntry(String oldDN, String newDN) {
} catch (NamingException ne) {
System.err.println("Error: " + ne.getMessage());
public boolean modifyInformation(String dn,String employeeID) {
System.out.println("updating...\n");
ModificationItem[] mods = new ModificationItem[1];
Attribute attr0 = new BasicAttribute("employeeID",employeeID);
mods[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr0);
dc.modifyAttributes(dn+",dc=example,dc=com", mods);
} catch (NamingException e) {
System.err.println("Error: " + e.getMessage());
} catch (NamingException e) {
System.out.println("NamingException in close():" + e);
public void searchInformation(String base, String scope, String filter) {
SearchControls sc = new SearchControls();
if (scope.equals("base")) {
sc.setSearchScope(SearchControls.OBJECT_SCOPE);
} else if (scope.equals("one")) {
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration ne = null;
ne = dc.search(base, filter, sc);
SearchResult sr = (SearchResult) ne.next();
String name = sr.getName();
if (base != null && !base.equals("")) {
System.out.println("entry: " + name + "," + base);
System.out.println("entry: " + name);
Attributes at = sr.getAttributes();
NamingEnumeration ane = at.getAll();
Attribute attr = (Attribute) ane.next();
String attrType = attr.getID();
NamingEnumeration values = attr.getAll();
Vector vals = new Vector();
while (values.hasMore()) {
Object oneVal = values.nextElement();
if (oneVal instanceof String) {
System.out.println(attrType + ": " + (String) oneVal);
System.out.println(attrType + ": " + new String((byte[]) oneVal));
} catch (Exception nex) {
System.err.println("Error: " + nex.getMessage());
public void Ldapbyuserinfo(String userName) {
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "sAMAccountName=" + userName;
String searchBase = "DC=example,DC=COM";
String returnedAtts[] = { "url", "whenChanged", "employeeID", "name",
"userPrincipalName", "physicalDeliveryOfficeName",
"departmentNumber", "telephoneNumber", "homePhone", "mobile",
"department", "sAMAccountName", "whenChanged", "mail" };
searchCtls.setReturningAttributes(returnedAtts);
NamingEnumeration answer = dc.search(searchBase, searchFilter,
if (answer == null || answer.equals(null)) {
System.out.println("answer is null");
System.out.println("answer not null");
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult) answer.next();
.println("************************************************");
System.out.println("getname=" + sr.getName());
Attributes Attrs = sr.getAttributes();
for (NamingEnumeration ne = Attrs.getAll(); ne
Attribute Attr = (Attribute) ne.next();
System.out.println("AttributeID="
+ Attr.getID().toString());
for (NamingEnumeration e = Attr.getAll(); e
.hasMore(); totalResults++) {
String user = e.next().toString();
System.out.println(user);
} catch (NamingException e) {
System.err.println("Throw Exception : " + e);
System.out.println("Number: " + totalResults);
System.err.println("Throw Exception : " + e);
public static void main(String[] args) {
new LdapbyUser("CN=RyanHanson","bbs.it-home.org");