1 package org.fhw.cabaweb.webfrontend.security.realm; 2 3 import java.sql.Timestamp; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 import org.apache.commons.logging.Log; 8 import org.apache.commons.logging.LogFactory; 9 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder; 10 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder; 11 import org.securityfilter.realm.SimpleSecurityRealmBase; 12 13 /*** 14 * Klasse für das Security Realm Interface. 15 * Check von Benutzername Passwort gegen die Datenbank. 16 * Check von Benutzername Role, ob Benutzer in dieser Rolle ist. 17 * 18 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a> 19 * @version Version 1.1 06.07.2004 20 */ 21 public class CabaWebSecurityRealm extends SimpleSecurityRealmBase 22 { 23 /*** 24 * The <code>Log</code> Instanz für diese Anwendung. 25 */ 26 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.security.realm.CabaWebSecurityRealm"); 27 28 /*** 29 * Authentifizierung des Benutzers. 30 * 31 * Implementiert die Funktionalität der Kontrolle von Benutzername und Passwort gegen 32 * den in der Datenbank gespeicherten Hash und Namen. 33 * 34 * @param username Der Benutzername 35 * @param password Das Plaintext Passwort 36 * 37 * @return true wenn Benutzer authentifiziert wurde, false wenn Benutzername/Passwort Kombination falsch war. 38 */ 39 public boolean booleanAuthenticate(String username, String password) 40 { 41 if (username != null) 42 { 43 DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder(); 44 Collection gruppenmitglieder = dig.sucheLogInName(username); 45 46 Iterator iter = gruppenmitglieder.iterator(); 47 if (gruppenmitglieder.size() == 1) 48 { 49 Gruppenmitglieder grpmitglied = (Gruppenmitglieder) iter.next(); 50 String passwordhashDB = grpmitglied.getPassworthash(); 51 String passwordhashUSER = grpmitglied.getPassworthash(); 52 53 if (grpmitglied.getProjektgruppe() != null && grpmitglied.getProjektgruppe().getProjekte() != null && grpmitglied.getProjektgruppe().getProjekte().getAktiv() != null && grpmitglied.getProjektgruppe().getProjekte().getAktiv().equals(Boolean.FALSE)) 54 { 55 if (log.isDebugEnabled()) 56 { 57 log.debug(" The Project the user '" + username + "' is subscribed to is inactive - Therefore the user is not allowed to login."); 58 } 59 60 return false; 61 } 62 63 if (passwordhashDB.equals(passwordhashUSER) && grpmitglied.getAktiv().equals(Boolean.TRUE)) 64 { 65 if (grpmitglied.getProjektgruppe() == null || grpmitglied.getProjektgruppe().getAktiv().equals(Boolean.FALSE)) 66 { 67 if (log.isDebugEnabled()) 68 { 69 log.debug(" Authenticated user " + username + " but group or user is deactivated."); 70 } 71 72 return false; 73 } 74 75 if (log.isDebugEnabled()) 76 { 77 log.debug(" Authenticated DB Hash " + passwordhashDB + " against given " + passwordhashUSER + " for name " + username); 78 } 79 80 grpmitglied.setLetzterlogin(new Timestamp(System.currentTimeMillis())); 81 dig.editieren(grpmitglied); 82 83 return true; 84 } 85 else 86 { 87 if (log.isDebugEnabled()) 88 { 89 log.debug(" Unable to authenticate DB Hash " + passwordhashDB + " against given " + passwordhashUSER + " for name " + username); 90 } 91 return false; 92 } 93 } 94 else 95 { 96 if (log.isDebugEnabled()) 97 { 98 log.debug(" (IMPOSSIBLE ???) There were found " + gruppenmitglieder.size() + " user(s) for this name " + username); 99 } 100 101 return false; 102 } 103 } 104 else 105 { 106 if (log.isDebugEnabled()) 107 { 108 log.debug(" No User given"); 109 } 110 111 return false; 112 } 113 } 114 115 /*** 116 * Authentifizierung des Benutzers. 117 * 118 * Implementiert die Funktionalität der Kontrolle von Benutzername und Role gegen 119 * den in der Datenbank gespeicherten Namen und dessen Rollenzuordnung. 120 * 121 * @param username Der Benutzername 122 * @param role Die Rolle auf die der Benutzer geprüft werden soll 123 * 124 * @return true wenn Benutzer diese Rolle hat, false wenn Benutzer diese Rolle NICHT hat. 125 */ 126 public boolean isUserInRole(String username, String role) 127 { 128 if (username != null && role != null) 129 { 130 DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder(); 131 Collection gruppenmitglieder = dig.sucheLogInName(username); 132 133 Iterator iter = gruppenmitglieder.iterator(); 134 if (gruppenmitglieder.size() == 1) 135 { 136 Gruppenmitglieder grpmitglied = (Gruppenmitglieder) iter.next(); 137 138 if (role.compareTo("Administrator") == 0) 139 { 140 if (log.isDebugEnabled()) 141 { 142 log.debug(" Is User " + username + " an Administrator ???"); 143 } 144 145 if (grpmitglied.getBenutzerrolle().getAdmin().booleanValue() == true) 146 { 147 if (log.isDebugEnabled()) 148 { 149 log.debug(" User " + username + " is an Administrator !"); 150 } 151 152 return true; 153 } 154 else 155 { 156 return false; 157 } 158 } 159 else if (role.compareTo("Projektleiter") == 0) 160 { 161 if (log.isDebugEnabled()) 162 { 163 log.debug(" Is User " + username + " a Projektleader ???"); 164 } 165 166 if (grpmitglied.getBenutzerrolle().getProjektleiter().booleanValue() == true) 167 { 168 if (log.isDebugEnabled()) 169 { 170 log.debug(" User " + username + " is a Projectleader !"); 171 } 172 173 return true; 174 } 175 else 176 { 177 return false; 178 } 179 } 180 else if (role.compareTo("Benutzer") == 0) 181 { 182 if (log.isDebugEnabled()) 183 { 184 log.debug(" Is User " + username + " a 'simple' User ???"); 185 } 186 187 if (grpmitglied.getBenutzerrolle().getGruppenmitglied().booleanValue() == true) 188 { 189 if (log.isDebugEnabled()) 190 { 191 log.debug(" User " + username + " is a 'simple' User !"); 192 } 193 194 return true; 195 } 196 else 197 { 198 return false; 199 } 200 } 201 else 202 { 203 if (log.isDebugEnabled()) 204 { 205 log.debug(" Unknown Role " + role + " for " + username); 206 } 207 208 return false; 209 } 210 } 211 else 212 { 213 if (log.isDebugEnabled()) 214 { 215 log.debug(" !!! DON'T KNOW HOW THIS COULD HAVE HAPPENED ?!? DATABASE OK ?!? There were found " + gruppenmitglieder.size() + " user(s) for this name " + username + " and role " + role); 216 } 217 218 return false; 219 } 220 } 221 else 222 { 223 if (log.isDebugEnabled()) 224 { 225 log.debug(" No User or no role given "); 226 } 227 228 return false; 229 } 230 } 231 }