View Javadoc

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 }