001 /*
002 * Created on 28.02.2004
003 */
004 package de.fub.tip.datenbank.logik;
005
006 import java.sql.Connection;
007 import java.sql.PreparedStatement;
008 import java.sql.ResultSet;
009 import java.sql.SQLException;
010
011 import javax.sql.DataSource;
012
013 import org.apache.log4j.Logger;
014
015 import de.fub.tip.datenanzeige.ormapper.UserdataVO;
016 import de.fub.tip.datenbank.factory.LogicObject;
017 import de.fub.tip.exceptions.UserNotFoundException;
018
019 /**
020 * Sinn: stellt eine Verbindung zur DB her und <br>übernimmt die
021 * Prüfung des Logins, wobei ein Userdata-ViewObject erzeugt wird,<br>
022 * auf dem die Oberfläche arbeiten kann.
023 * <br>
024 * @author hirsch, 28.02.2004
025 * @version 2004-05-03
026 * $Id: LoginPruefer.java,v 1.18 2004/05/03 07:55:12 hirsch Exp $
027 *
028 * @see de.fub.tip.datenanzeige.ormapper.UserdataVO
029 *
030 * <hr>
031 * Tipp aus WWW:<br>
032 * You can check if someone is logged in by checking if <br>
033 * <code>request.getUserPrincipal()</code> returns null or not.
034 * <hr>
035 */
036
037 public class LoginPruefer implements LogicObject {
038 /** Logger zur Fehlersuche */
039 private static Logger logger = Logger.getLogger(LoginPruefer.class);
040 /** Datenquelle mit der der <code>LoginPruefer</code> arbeitet */
041 private DataSource datasource = null;
042
043 /**
044 * Standardkonstruktor, der einen LoginDatenPrüfer erzeugt
045 * @param datasource Datenquelle
046 */
047 public LoginPruefer(DataSource datasource) {
048 this.datasource = datasource;
049 logger.info("LoginPruefer initialized.");
050 } // end of Konstruktor
051
052 /**
053 * hier geschieht die eigentliche LoginÜberprüfung
054 * <br>
055 * Das zurückgegebene UserdataVO enthält aus Sicherheitsgründen
056 * <b>KEIN</b> Passwort. Dadurch kann man das Objekt getrost
057 * in der Session speichern, ohne die Userdaten zu kompromitieren.
058 * <br>
059 * <b>ACHTUNG!</b><br>
060 * In <code>PreparedStatements</code> niemals das Fragezeichen
061 * in Delimiter setzen! - '?' erzeugt eine Ausnahme, die besagt,
062 * dass die Parametergrößen ungültig sind....
063 * <br>nur ? allein und alles geht!
064 * <br>
065 * @param username übergebener Username
066 * @param passwort übergebenes Passwort
067 *
068 * @return UserdataVO als Kapselung des in der DB enthaltenen Users
069 *
070 * @throws UserNotFound wenn Anmeldedaten ungültig sind
071 */
072 public UserdataVO checkValidUser(String username, String passwort)
073 throws UserNotFoundException, SQLException {
074
075 UserdataVO ergebnis = new UserdataVO();
076
077 Connection con = this.datasource.getConnection();
078 PreparedStatement prepStatement = con.prepareStatement(
079 "SELECT * FROM userdata u " +
080 "WHERE u.login=? AND u.passwort = ?");
081
082 // Parameter laden
083 prepStatement.setString(1, username);
084 prepStatement.setString(2, passwort);
085
086 ResultSet rs = prepStatement.executeQuery();
087
088 if( rs != null && rs.next()) {
089 // Ergebnis in UserdataVO speichern
090 ergebnis.setId(new Integer(rs.getInt("udid")));
091 ergebnis.setName(rs.getString("name"));
092 ergebnis.setLast_name(rs.getString("last_name"));
093 ergebnis.setLogin(rs.getString("login"));
094 ergebnis.setPasswort("bogusPassword");
095 // standardmässig kommt hier das ISO-Format: YYYY-MM-DD
096 ergebnis.setAnmeldedatum(
097 rs.getDate("anmeldedatum").toString());
098
099 logger.info("LoginPruefer für USERDATAVO["+
100 ergebnis.getName()+"]");
101 ergebnis.logObject(logger);
102
103 // Schliessen/Freigabe der Datenbankverbindung
104 try {
105 if(con != null) con.close();
106 logger.debug("LoginPruefer: DB-Con geschlossen.");
107 } catch (SQLException e) {
108 logger.debug("LoginPruefer: " +
109 "geschachtelte Ausnahme beim Schliessen der " +
110 "DB-Verbindung.");
111 } // end of try
112
113 return ergebnis;
114 } else {
115 logger.error("LoginPruefer.UserNotFound - " +
116 "LoginPruefer.checkValidUser("+ username +"," +
117 passwort+ ")");
118
119 // Schliessen/Freigabe der Datenbankverbindung
120 try {
121 if(con != null) con.close();
122 logger.debug("LoginPruefer: DB-Con geschlossen.");
123 } catch (SQLException e) {
124 logger.debug("LoginPruefer: " +
125 "geschachtelte Ausnahme beim Schliessen der " +
126 "DB-Verbindung.");
127 } // end of try
128
129 throw new UserNotFoundException(
130 "LoginPruefer.UserNotFound - " +
131 "checkValidUser("+username+","+passwort+")");
132 } // end if
133 } // end of checkValidUser
134 } // end of class
|