java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java
changeset 6 aff44e80f418
parent 4 c7d713d71ad3
     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  }