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.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;


public class ConnectLDAP {

	private static String ldapProviderURL = "ldap://10.1.0.4:389";
	private static String userName = "username";
	private static String userPassword = "*************";

	public static void main(String[] args) {

		Hashtable<String, String> env = new Hashtable<String, String>();
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.ldap.LdapCtxFactory");

		// set security credentials, note using simple cleartext authentication
		env.put(Context.SECURITY_AUTHENTICATION, "simple");
		env.put(Context.SECURITY_PRINCIPAL, userName + "@intranet.cefetba.br");
		env.put(Context.SECURITY_CREDENTIALS, userPassword);

		// connect to my domain controller
		env.put(Context.PROVIDER_URL, ldapProviderURL);

		try {
			// Create the initial directory context
			LdapContext ctx = new InitialLdapContext(env, null);

			// Create the search controls
			SearchControls searchCtls = new SearchControls();

			// Specify the attributes to return
			String returnedAtts[] = { "sn", "givenName", "ou" };
			searchCtls.setReturningAttributes(returnedAtts);

			// Specify the search scope
			searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

			// specify the LDAP search filter
			String searchFilter = "(&(objectClass=*)(samaccountname="
					+ userName + "))";

			// Specify the Base for the search
			String searchBase = "DC=intranet,DC=cefetba,DC=br";

			// Search for objects using the filter
			NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter,
					searchCtls);

			if (answer.hasMoreElements()) {
				SearchResult sr = (SearchResult) answer.next();
				Attributes attributes = ctx.getAttributes(sr.getName()
						+ ",DC=intranet,DC=cefetba,DC=br");

				Attribute attr = attributes.get("name");
				System.out.println(attr);
				for (NamingEnumeration todosAtributos = attributes.getAll(); todosAtributos.hasMore();) {
					Attribute attrib = (Attribute) todosAtributos.next();
					String nomeAtributo = attrib.getID();
					System.out.println("Atributo:" + nomeAtributo +" = "+ attrib);
					}
				ctx.close();
			} else {
				// erro - nao foi achado no AD

				System.out.println("NAO");
				ctx.close();
			}

		} catch (NamingException e) {
			e.printStackTrace();
		}

	}

}