java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java
author František Kučera <franta-hg@frantovo.cz>
Tue, 07 Feb 2012 00:27:39 +0100
changeset 6 aff44e80f418
parent 4 c7d713d71ad3
permissions -rw-r--r--
Napojení na SQL databázi.
     1 package cz.frantovo.jaas.sql;
     2 
     3 import com.sun.appserv.security.AppservPasswordLoginModule;
     4 import com.sun.enterprise.security.auth.realm.NoSuchUserException;
     5 import java.util.ArrayList;
     6 import java.util.Arrays;
     7 import java.util.Enumeration;
     8 import java.util.List;
     9 import java.util.logging.Level;
    10 import java.util.logging.Logger;
    11 import javax.security.auth.login.LoginException;
    12 
    13 /**
    14  * Přihlašovací modul pro SQL doménu.
    15  *
    16  * TODO: později bude potomkem
    17  * <code>com.sun.appserv.security.AbstractLoginModule</code>
    18  *
    19  * @author fiki
    20  */
    21 public class SQLLoginModul extends AppservPasswordLoginModule {
    22 
    23 	/**
    24 	 * viz konfigurace v login.conf
    25 	 */
    26 	public static final String VÝCHOZÍ_JAAS_KONTEXT = "sqlRealm";
    27 	private static final Logger log = Logger.getLogger(SQLLoginModul.class.getName());
    28 
    29 	@Override
    30 	protected void authenticateUser() throws LoginException {
    31 		if (_currentRealm instanceof SQLRealm) {
    32 			try {
    33 				SQLRealm sqlRealm = (SQLRealm) _currentRealm;
    34 				sqlRealm.ověřUživatele(_username, _passwd);
    35 								
    36 				String skupiny[] = poleSkupin(sqlRealm.getGroupNames(_username));
    37 				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)});
    38 				commitUserAuthentication(skupiny);
    39 			} catch (NoSuchUserException nue) {
    40 				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);
    41 				throw new LoginException("Neexistující uživatel: " + _username);
    42 			}
    43 		} else {
    44 			throw new LoginException("Špatný realm: " + _currentRealm + " Očekávám: SQLRealm.");
    45 		}
    46 	}
    47 	
    48 	/**
    49 	 * Převede výčet na pole
    50 	 */
    51 	private static String[] poleSkupin(Enumeration<String> e) {
    52 		List<String> l = new ArrayList<>();
    53 		while (e.hasMoreElements()) {
    54 			l.add(e.nextElement());
    55 		}
    56 		return l.toArray(new String[0]);
    57 	}
    58 }