Hi,

Just a mini-post concerning an utility class/helper in order to request LDAP/AD LDAPHelper:

package com.huo.lu.db.extract.ldap;

import java.io.IOException;
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;

import com.huo.lu.db.extract.AppConstant;

/**
 * Helper in order to request LDAP/AD.
 */
public class LDAPHelper {

	private String ldapUrl = null;
	private String ldapBind = null;
	private String ldapPassword = null;
	private String searchOu = null;
	private String mfAgentSearchCriteria = null;
	private String phoneSearchCriteria = null;
	private String eMailSearchCriteria = null;
	private String nameSearchCriteria = null;
	private String adLoginSearchCriteria = null;

	private LdapContext ldapContext = null;
	private SearchControls searchCtls = null;


	public LDAPHelper(String ldapUrl, String ldapBind, String ldapPassword, String searchOu,
			String mfAgentSearchCriteria, String phoneSearchCriteria, String eMailSearchCriteria, 
			String nameSearchCriteria, String adLoginSearchCriteria) throws NamingException, IOException {

		this.initLDAP(ldapUrl, ldapBind, ldapPassword, searchOu, mfAgentSearchCriteria, phoneSearchCriteria, 
				eMailSearchCriteria, nameSearchCriteria, adLoginSearchCriteria);
	}

	
	private void initLDAP(String ldapUrl, String ldapBind, String ldapPassword, String searchOu,
			String mfAgentSearchCriteria, String phoneSearchCriteria, String eMailSearchCriteria, 
			String nameSearchCriteria, String adLoginSearchCriteria) throws NamingException, IOException {

		this.ldapUrl = ldapUrl;
		this.ldapBind = ldapBind;
		this.ldapPassword = ldapPassword;
		this.searchOu = searchOu;
		this.mfAgentSearchCriteria = mfAgentSearchCriteria;
		this.phoneSearchCriteria = phoneSearchCriteria;
		this.eMailSearchCriteria = eMailSearchCriteria;
		this.nameSearchCriteria = nameSearchCriteria;
		this.adLoginSearchCriteria = adLoginSearchCriteria;
		
		if (this.ldapUrl != null && !this.ldapUrl.equals("")) {
			Hashtable<String, String> ldapEnvironment = new Hashtable<String, String>(5);
			ldapEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, AppConstant.INITIAL_CONTEXT_FACTORY);
			ldapEnvironment.put(Context.PROVIDER_URL, this.ldapUrl);
			ldapEnvironment.put(Context.SECURITY_AUTHENTICATION, AppConstant.SECURITY_AUTHENTICATION);
			ldapEnvironment.put(Context.SECURITY_PRINCIPAL, this.ldapBind);
			ldapEnvironment.put(Context.SECURITY_CREDENTIALS, this.ldapPassword);
			// Create initial context
			ldapContext = new InitialLdapContext(ldapEnvironment, null);
			searchCtls = new SearchControls();
			searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
		}
	}


		
	public void closeLDAP() throws NamingException {
		// Close the context when we're done
		ldapContext.close();
	}

	public String query(String mfUserName, String ldapResAttr) throws NamingException {
		NamingEnumeration<SearchResult> answer = getUserAttributes(mfUserName);
		return getSearchResult(answer, ldapResAttr);
	}

	public NamingEnumeration<SearchResult> getUserAttributes(String mfUserName) throws NamingException {
		NamingEnumeration<SearchResult> answer = ldapContext.search(searchOu, "(" + mfAgentSearchCriteria + "=" + mfUserName + ")", searchCtls);
		return answer;
	}

	public String getSearchResult(NamingEnumeration<SearchResult> ldapAnswer, String ldapResAttr) throws NamingException {
		String result = null;
		while (ldapAnswer.hasMore() && (result == null || result.equals(""))) {
			SearchResult sr = (SearchResult) ldapAnswer.next();
			Attributes attrs = sr.getAttributes();
			Attribute dn = attrs.get(ldapResAttr);
			if (dn != null) {
				result = (String) dn.get();
			}
			return result;
		}
		return result;
	}

	public String getSearchResult(Attributes attrs, String ldapResAttr) throws NamingException {
		String result = null;
		Attribute dn = attrs.get(ldapResAttr);
		if (dn != null) {
			result = (String) dn.get();
		}
		return result;
	}
	
	public String getPhoneNumber(String mfUserName) throws NamingException {
		return query(mfUserName, phoneSearchCriteria);
	}

	public String getPhoneNumber(NamingEnumeration<SearchResult> userAttr) throws NamingException {
		return getSearchResult(userAttr, phoneSearchCriteria);
	}

	public String getEMail(String mfUserName) throws NamingException {
		return query(mfUserName, eMailSearchCriteria);
	}

	public String getEMail(NamingEnumeration<SearchResult> userAttr) throws NamingException {
		return getSearchResult(userAttr, eMailSearchCriteria);
	}

	public String getName(String mfUserName) throws NamingException {
		return query(mfUserName, nameSearchCriteria);
	}

	public String getName(NamingEnumeration<SearchResult> userAttr) throws NamingException {
		return getSearchResult(userAttr, nameSearchCriteria);
	}

	public void finalize() {
		try {
			this.closeLDAP();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	
	
	public NamingEnumeration<SearchResult> getUserAttributesFromADLogin(String adLogin) throws NamingException {
		NamingEnumeration<SearchResult> answer = ldapContext.search(searchOu, "(" + adLoginSearchCriteria + "=" + adLogin + ")", searchCtls);
		return answer;
	}

}

That’s all!!!!

Huseyin OZVEREN