KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > cofax > cms > login > LDAPLogin


1 /*
2  * Créé le 26 avr. 05
3  *
4  * Pour changer le modèle de ce fichier généré, allez à :
5  * Fenêtre>Préférences>Java>Génération de code>Code et commentaires
6  */

7 package org.cofax.cms.login;
8
9 import java.util.HashMap JavaDoc;
10
11 import javax.servlet.ServletConfig JavaDoc;
12
13 import org.cofax.DataStore;
14 import org.cofax.cms.CofaxToolsDbUtils;
15 import org.cofax.cms.CofaxToolsUtil;
16 import org.cofax.util.digest.DigestHandlerFactory;
17 import org.cofax.util.digest.IDigestHandler;
18
19 import com.novell.ldap.LDAPConnection;
20 import com.novell.ldap.LDAPEntry;
21 import com.novell.ldap.LDAPException;
22 import com.novell.ldap.LDAPSearchResults;
23
24 /**
25  * 26 avr. 05
26  *
27  * @author Nicolas Richeton (Smile)
28  */

29 public class LDAPLogin implements ILoginHandler {
30
31     private String JavaDoc ldapLogin = "cn";
32
33     private String JavaDoc ldapPassword = "userPassword";
34
35     private int ldapVersion = LDAPConnection.LDAP_V3;
36
37     private int ldapPort = 389;
38
39     private String JavaDoc ldapHost = "";
40
41     private String JavaDoc adminDn = "";
42
43     private String JavaDoc adminPassword = "";
44
45     private String JavaDoc searchBase = "";
46
47     private String JavaDoc objectClass = "";
48
49     /*
50      * (non-Javadoc)
51      *
52      * @see org.cofax.cms.login.ICofaxLogin#init(java.util.Properties)
53      */

54     public void init(ServletConfig JavaDoc config) {
55
56         objectClass = config.getInitParameter("ldapObjectClass");
57         ldapLogin = config.getInitParameter("ldapLogin");
58         ldapPassword = config.getInitParameter("ldapPassword");
59         ldapHost = config.getInitParameter("ldapHost");
60         ldapPort = Integer.parseInt(config.getInitParameter("ldapPort"));
61         adminDn = config.getInitParameter("ldapAdminDn");
62         adminPassword = config.getInitParameter("ldapAdminPassword");
63         searchBase = config.getInitParameter("ldapSearchBase");
64
65         int ldapVersion = Integer.parseInt(config.getInitParameter("ldapVersion"));
66         if (ldapVersion == 3)
67             ldapVersion = LDAPConnection.LDAP_V3;
68
69         if (ldapVersion == 2)
70             ldapVersion = LDAPConnection.LDAP_V2;
71
72     }
73
74     /*
75      * (non-Javadoc)
76      *
77      * @see org.cofax.cms.login.ICofaxLogin#getUserHash(org.cofax.DataStore,
78      * java.lang.String, java.lang.String)
79      */

80     public HashMap JavaDoc getUserHash(DataStore db, String JavaDoc login, String JavaDoc password) {
81         HashMap JavaDoc userInfoHash = new HashMap JavaDoc();
82
83         try {
84             if (checkLdapUser(login, password)) {
85                 String JavaDoc tag = CofaxToolsDbUtils.fillTag(db, "getUserInfoByLogin");
86                 HashMap JavaDoc fillReq = new HashMap JavaDoc();
87                 fillReq.put("login", login);
88
89                 userInfoHash = CofaxToolsDbUtils.getNameValuePackageHash(db, fillReq, tag);
90             }
91         } catch (LDAPException e) {
92             CofaxToolsUtil.log("LDAP : " + e);
93         }
94
95         return userInfoHash;
96     }
97
98     private boolean checkLdapUser(String JavaDoc login, String JavaDoc password) throws LDAPException {
99
100         boolean correctPassword = false;
101
102         LDAPConnection lc = new LDAPConnection();
103
104         try {
105             lc.connect(ldapHost, ldapPort);
106
107             CofaxToolsUtil.log("Connexion LDAP OK.");
108
109             lc.bind(ldapVersion, adminDn, adminPassword);
110
111             CofaxToolsUtil.log("Bind LDAP OK.");
112
113             int searchScope = LDAPConnection.SCOPE_SUB;
114
115             String JavaDoc[] attrs = { ldapLogin, ldapPassword };
116             boolean attributeNameOnly = false;
117
118             // Look for user
119
String JavaDoc searchFilter = "(&(objectClass=" + objectClass + ")(" + ldapLogin + "=" + login + "))";
120
121             CofaxToolsUtil.log("searchFilter= " + searchFilter);
122
123             LDAPSearchResults searchResults = lc.search(searchBase, searchScope, searchFilter, attrs, attributeNameOnly);
124
125             LDAPEntry userEntry = null;
126             if (searchResults.hasMore()) {
127                 // Get user from ldap
128
userEntry = searchResults.next();
129
130                 // Get user password from ldap
131
String JavaDoc passwordDigest = userEntry.getAttribute(ldapPassword).getStringValue();
132
133                 // check password using the right digest
134
IDigestHandler digest = DigestHandlerFactory.getDigest(passwordDigest);
135                 correctPassword = digest.checkPassword(password, passwordDigest);
136             }
137
138         } catch (LDAPException e) {
139             CofaxToolsUtil.log("LDAP : " + e);
140             throw e;
141         } finally {
142             try {
143                 // disconnect with the server
144
lc.disconnect();
145             } catch (LDAPException e) {
146                 CofaxToolsUtil.log("LDAP : " + e);
147             }
148         }
149
150         CofaxToolsUtil.log("correctPassword= " + correctPassword);
151
152         return correctPassword;
153     }
154
155 }
156
Popular Tags