1.1 --- a/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java Thu Jul 21 23:41:05 2011 +0200
1.2 +++ b/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java Tue Feb 07 00:27:39 2012 +0100
1.3 @@ -1,33 +1,58 @@
1.4 package cz.frantovo.jaas.sql;
1.5
1.6 import com.sun.appserv.security.AppservPasswordLoginModule;
1.7 +import com.sun.enterprise.security.auth.realm.NoSuchUserException;
1.8 +import java.util.ArrayList;
1.9 import java.util.Arrays;
1.10 +import java.util.Enumeration;
1.11 +import java.util.List;
1.12 import java.util.logging.Level;
1.13 import java.util.logging.Logger;
1.14 import javax.security.auth.login.LoginException;
1.15
1.16 /**
1.17 * Přihlašovací modul pro SQL doménu.
1.18 - * TODO: později bude potomkem <code>com.sun.appserv.security.AbstractLoginModule</code>
1.19 + *
1.20 + * TODO: později bude potomkem
1.21 + * <code>com.sun.appserv.security.AbstractLoginModule</code>
1.22 + *
1.23 * @author fiki
1.24 */
1.25 public class SQLLoginModul extends AppservPasswordLoginModule {
1.26
1.27 - /** viz konfigurace v login.conf */
1.28 + /**
1.29 + * viz konfigurace v login.conf
1.30 + */
1.31 public static final String VÝCHOZÍ_JAAS_KONTEXT = "sqlRealm";
1.32 private static final Logger log = Logger.getLogger(SQLLoginModul.class.getName());
1.33
1.34 @Override
1.35 protected void authenticateUser() throws LoginException {
1.36 -
1.37 - if (_currentRealm instanceof SQLRealm) {
1.38 -
1.39 - SQLRealm sqlRealm = (SQLRealm)_currentRealm;
1.40 - String skupiny[] = sqlRealm.ověřUživatele(_username, _passwd);
1.41 - commitUserAuthentication(skupiny);
1.42 -
1.43 + if (_currentRealm instanceof SQLRealm) {
1.44 + try {
1.45 + SQLRealm sqlRealm = (SQLRealm) _currentRealm;
1.46 + sqlRealm.ověřUživatele(_username, _passwd);
1.47 +
1.48 + String skupiny[] = poleSkupin(sqlRealm.getGroupNames(_username));
1.49 + log.log(Level.INFO, "Uživatel {0} byl úspěšně ověřen a je členem těchto skupin: {1}", new Object[]{_username, Arrays.toString(skupiny)});
1.50 + commitUserAuthentication(skupiny);
1.51 + } catch (NoSuchUserException nue) {
1.52 + log.log(Level.SEVERE, "Uživatele se podařilo ověřit, ale při pokusu o zjištění jeho skupin došlo k chybě. Uživatel: " + _username, nue);
1.53 + throw new LoginException("Neexistující uživatel: " + _username);
1.54 + }
1.55 } else {
1.56 throw new LoginException("Špatný realm: " + _currentRealm + " Očekávám: SQLRealm.");
1.57 }
1.58 }
1.59 +
1.60 + /**
1.61 + * Převede výčet na pole
1.62 + */
1.63 + private static String[] poleSkupin(Enumeration<String> e) {
1.64 + List<String> l = new ArrayList<>();
1.65 + while (e.hasMoreElements()) {
1.66 + l.add(e.nextElement());
1.67 + }
1.68 + return l.toArray(new String[0]);
1.69 + }
1.70 }