diff -r e013564c8e6f -r aff44e80f418 java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java --- a/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java Thu Jul 21 23:41:05 2011 +0200 +++ b/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java Tue Feb 07 00:27:39 2012 +0100 @@ -1,33 +1,58 @@ package cz.frantovo.jaas.sql; import com.sun.appserv.security.AppservPasswordLoginModule; +import com.sun.enterprise.security.auth.realm.NoSuchUserException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.security.auth.login.LoginException; /** * Přihlašovací modul pro SQL doménu. - * TODO: později bude potomkem com.sun.appserv.security.AbstractLoginModule + * + * TODO: později bude potomkem + * com.sun.appserv.security.AbstractLoginModule + * * @author fiki */ public class SQLLoginModul extends AppservPasswordLoginModule { - /** viz konfigurace v login.conf */ + /** + * viz konfigurace v login.conf + */ public static final String VÝCHOZÍ_JAAS_KONTEXT = "sqlRealm"; private static final Logger log = Logger.getLogger(SQLLoginModul.class.getName()); @Override protected void authenticateUser() throws LoginException { - - if (_currentRealm instanceof SQLRealm) { - - SQLRealm sqlRealm = (SQLRealm)_currentRealm; - String skupiny[] = sqlRealm.ověřUživatele(_username, _passwd); - commitUserAuthentication(skupiny); - + if (_currentRealm instanceof SQLRealm) { + try { + SQLRealm sqlRealm = (SQLRealm) _currentRealm; + sqlRealm.ověřUživatele(_username, _passwd); + + String skupiny[] = poleSkupin(sqlRealm.getGroupNames(_username)); + 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)}); + commitUserAuthentication(skupiny); + } catch (NoSuchUserException nue) { + 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); + throw new LoginException("Neexistující uživatel: " + _username); + } } else { throw new LoginException("Špatný realm: " + _currentRealm + " Očekávám: SQLRealm."); } } + + /** + * Převede výčet na pole + */ + private static String[] poleSkupin(Enumeration e) { + List l = new ArrayList<>(); + while (e.hasMoreElements()) { + l.add(e.nextElement()); + } + return l.toArray(new String[0]); + } }