1 // ========================================================================
2 // $Id: JDBCLoginModule.java 478 2006-04-23 22:00:17Z gregw $
3 // Copyright 2002-2004 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 package org.mortbay.jetty.plus.jaas.spi;
17
18 import java.sql.Connection;
19 import java.sql.DriverManager;
20 import java.util.Map;
21
22 import javax.security.auth.Subject;
23 import javax.security.auth.callback.CallbackHandler;
24
25 import org.mortbay.log.Log;
26 import org.mortbay.util.Loader;
27
28
29
30 /* ---------------------------------------------------- */
31 /** JDBCLoginModule
32 * <p>JAAS LoginModule to retrieve user information from
33 * a database and authenticate the user.
34 *
35 * <p><h4>Notes</h4>
36 * <p>This version uses plain old JDBC connections NOT
37 * Datasources.
38 *
39 * <p><h4>Usage</h4>
40 * <pre>
41 */
42 /*
43 * </pre>
44 *
45 * @see
46 * @version 1.0 Tue Apr 15 2003
47 * @author Jan Bartel (janb)
48 */
49 public class JDBCLoginModule extends AbstractDatabaseLoginModule
50 {
51 private String dbDriver;
52 private String dbUrl;
53 private String dbUserName;
54 private String dbPassword;
55
56
57
58
59
60
61 /**
62 * Get a connection from the DriverManager
63 * @see org.mortbay.jetty.plus.jaas.spi.AbstractDatabaseLoginModule#getConnection()
64 * @return
65 * @throws Exception
66 */
67 public Connection getConnection ()
68 throws Exception
69 {
70 if (!((dbDriver != null)
71 &&
72 (dbUrl != null)))
73 throw new IllegalStateException ("Database connection information not configured");
74
75 if(Log.isDebugEnabled())Log.debug("Connecting using dbDriver="+dbDriver+"+ dbUserName="+dbUserName+", dbPassword="+dbUrl);
76
77 return DriverManager.getConnection (dbUrl,
78 dbUserName,
79 dbPassword);
80 }
81
82
83
84 /* ------------------------------------------------ */
85 /** Init LoginModule.
86 * Called once by JAAS after new instance created.
87 * @param subject
88 * @param callbackHandler
89 * @param sharedState
90 * @param options
91 */
92 public void initialize(Subject subject,
93 CallbackHandler callbackHandler,
94 Map sharedState,
95 Map options)
96 {
97 try
98 {
99 super.initialize(subject, callbackHandler, sharedState, options);
100
101 //get the jdbc username/password, jdbc url out of the options
102 dbDriver = (String)options.get("dbDriver");
103 dbUrl = (String)options.get("dbUrl");
104 dbUserName = (String)options.get("dbUserName");
105 dbPassword = (String)options.get("dbPassword");
106
107 if (dbUserName == null)
108 dbUserName = "";
109
110 if (dbPassword == null)
111 dbPassword = "";
112
113 if (dbDriver != null)
114 Loader.loadClass(this.getClass(), dbDriver).newInstance();
115 }
116 catch (ClassNotFoundException e)
117 {
118 throw new IllegalStateException (e.toString());
119 }
120 catch (InstantiationException e)
121 {
122 throw new IllegalStateException (e.toString());
123 }
124 catch (IllegalAccessException e)
125 {
126 throw new IllegalStateException (e.toString());
127 }
128 }
129 }