Hi,
Just a mini-post concerning an utility class/helper in order to request LDAP/AD LDAPHelper:
001 | package com.huo.lu.db.extract.ldap; |
002 |
003 | import java.io.IOException; |
004 | import java.util.Hashtable; |
005 |
006 | import javax.naming.Context; |
007 | import javax.naming.NamingEnumeration; |
008 | import javax.naming.NamingException; |
009 | import javax.naming.directory.Attribute; |
010 | import javax.naming.directory.Attributes; |
011 | import javax.naming.directory.SearchControls; |
012 | import javax.naming.directory.SearchResult; |
013 | import javax.naming.ldap.InitialLdapContext; |
014 | import javax.naming.ldap.LdapContext; |
015 |
016 | import com.huo.lu.db.extract.AppConstant; |
017 |
018 | /** |
019 | * Helper in order to request LDAP/AD. |
020 | */ |
021 | public class LDAPHelper { |
022 |
023 | private String ldapUrl = null ; |
024 | private String ldapBind = null ; |
025 | private String ldapPassword = null ; |
026 | private String searchOu = null ; |
027 | private String mfAgentSearchCriteria = null ; |
028 | private String phoneSearchCriteria = null ; |
029 | private String eMailSearchCriteria = null ; |
030 | private String nameSearchCriteria = null ; |
031 | private String adLoginSearchCriteria = null ; |
032 |
033 | private LdapContext ldapContext = null ; |
034 | private SearchControls searchCtls = null ; |
035 |
036 |
037 | public LDAPHelper(String ldapUrl, String ldapBind, String ldapPassword, String searchOu, |
038 | String mfAgentSearchCriteria, String phoneSearchCriteria, String eMailSearchCriteria, |
039 | String nameSearchCriteria, String adLoginSearchCriteria) throws NamingException, IOException { |
040 |
041 | this .initLDAP(ldapUrl, ldapBind, ldapPassword, searchOu, mfAgentSearchCriteria, phoneSearchCriteria, |
042 | eMailSearchCriteria, nameSearchCriteria, adLoginSearchCriteria); |
043 | } |
044 |
045 | |
046 | private void initLDAP(String ldapUrl, String ldapBind, String ldapPassword, String searchOu, |
047 | String mfAgentSearchCriteria, String phoneSearchCriteria, String eMailSearchCriteria, |
048 | String nameSearchCriteria, String adLoginSearchCriteria) throws NamingException, IOException { |
049 |
050 | this .ldapUrl = ldapUrl; |
051 | this .ldapBind = ldapBind; |
052 | this .ldapPassword = ldapPassword; |
053 | this .searchOu = searchOu; |
054 | this .mfAgentSearchCriteria = mfAgentSearchCriteria; |
055 | this .phoneSearchCriteria = phoneSearchCriteria; |
056 | this .eMailSearchCriteria = eMailSearchCriteria; |
057 | this .nameSearchCriteria = nameSearchCriteria; |
058 | this .adLoginSearchCriteria = adLoginSearchCriteria; |
059 | |
060 | if ( this .ldapUrl != null && ! this .ldapUrl.equals( "" )) { |
061 | Hashtable<String, String> ldapEnvironment = new Hashtable<String, String>( 5 ); |
062 | ldapEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, AppConstant.INITIAL_CONTEXT_FACTORY); |
063 | ldapEnvironment.put(Context.PROVIDER_URL, this .ldapUrl); |
064 | ldapEnvironment.put(Context.SECURITY_AUTHENTICATION, AppConstant.SECURITY_AUTHENTICATION); |
065 | ldapEnvironment.put(Context.SECURITY_PRINCIPAL, this .ldapBind); |
066 | ldapEnvironment.put(Context.SECURITY_CREDENTIALS, this .ldapPassword); |
067 | // Create initial context |
068 | ldapContext = new InitialLdapContext(ldapEnvironment, null ); |
069 | searchCtls = new SearchControls(); |
070 | searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); |
071 | } |
072 | } |
073 |
074 |
075 | |
076 | public void closeLDAP() throws NamingException { |
077 | // Close the context when we're done |
078 | ldapContext.close(); |
079 | } |
080 |
081 | public String query(String mfUserName, String ldapResAttr) throws NamingException { |
082 | NamingEnumeration<SearchResult> answer = getUserAttributes(mfUserName); |
083 | return getSearchResult(answer, ldapResAttr); |
084 | } |
085 |
086 | public NamingEnumeration<SearchResult> getUserAttributes(String mfUserName) throws NamingException { |
087 | NamingEnumeration<SearchResult> answer = ldapContext.search(searchOu, "(" + mfAgentSearchCriteria + "=" + mfUserName + ")" , searchCtls); |
088 | return answer; |
089 | } |
090 |
091 | public String getSearchResult(NamingEnumeration<SearchResult> ldapAnswer, String ldapResAttr) throws NamingException { |
092 | String result = null ; |
093 | while (ldapAnswer.hasMore() && (result == null || result.equals( "" ))) { |
094 | SearchResult sr = (SearchResult) ldapAnswer.next(); |
095 | Attributes attrs = sr.getAttributes(); |
096 | Attribute dn = attrs.get(ldapResAttr); |
097 | if (dn != null ) { |
098 | result = (String) dn.get(); |
099 | } |
100 | return result; |
101 | } |
102 | return result; |
103 | } |
104 |
105 | public String getSearchResult(Attributes attrs, String ldapResAttr) throws NamingException { |
106 | String result = null ; |
107 | Attribute dn = attrs.get(ldapResAttr); |
108 | if (dn != null ) { |
109 | result = (String) dn.get(); |
110 | } |
111 | return result; |
112 | } |
113 | |
114 | public String getPhoneNumber(String mfUserName) throws NamingException { |
115 | return query(mfUserName, phoneSearchCriteria); |
116 | } |
117 |
118 | public String getPhoneNumber(NamingEnumeration<SearchResult> userAttr) throws NamingException { |
119 | return getSearchResult(userAttr, phoneSearchCriteria); |
120 | } |
121 |
122 | public String getEMail(String mfUserName) throws NamingException { |
123 | return query(mfUserName, eMailSearchCriteria); |
124 | } |
125 |
126 | public String getEMail(NamingEnumeration<SearchResult> userAttr) throws NamingException { |
127 | return getSearchResult(userAttr, eMailSearchCriteria); |
128 | } |
129 |
130 | public String getName(String mfUserName) throws NamingException { |
131 | return query(mfUserName, nameSearchCriteria); |
132 | } |
133 |
134 | public String getName(NamingEnumeration<SearchResult> userAttr) throws NamingException { |
135 | return getSearchResult(userAttr, nameSearchCriteria); |
136 | } |
137 |
138 | public void finalize() { |
139 | try { |
140 | this .closeLDAP(); |
141 | } catch (NamingException e) { |
142 | e.printStackTrace(); |
143 | } |
144 | } |
145 | |
146 | |
147 | public NamingEnumeration<SearchResult> getUserAttributesFromADLogin(String adLogin) throws NamingException { |
148 | NamingEnumeration<SearchResult> answer = ldapContext.search(searchOu, "(" + adLoginSearchCriteria + "=" + adLogin + ")" , searchCtls); |
149 | return answer; |
150 | } |
151 |
152 | } |
That’s all!!!!
Huseyin OZVEREN