Jde to zkompilovat a spustit. Umí přihlásit i nepřihlásit uživatele. K databázi se zatím nepřipojuje.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu, 21 Jul 2011 23:40:45 +0200
changeset 4c7d713d71ad3
parent 3 f08e57ab4480
child 5 e013564c8e6f
Jde to zkompilovat a spustit. Umí přihlásit i nepřihlásit uživatele. K databázi se zatím nepřipojuje.
java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java
java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLRealm.java
     1.1 --- a/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java	Thu Jul 21 20:35:23 2011 +0200
     1.2 +++ b/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLLoginModul.java	Thu Jul 21 23:40:45 2011 +0200
     1.3 @@ -1,10 +1,33 @@
     1.4  package cz.frantovo.jaas.sql;
     1.5  
     1.6  import com.sun.appserv.security.AppservPasswordLoginModule;
     1.7 +import java.util.Arrays;
     1.8 +import java.util.logging.Level;
     1.9 +import java.util.logging.Logger;
    1.10 +import javax.security.auth.login.LoginException;
    1.11  
    1.12  /**
    1.13 + * Přihlašovací modul pro SQL doménu.
    1.14   * TODO: později bude potomkem <code>com.sun.appserv.security.AbstractLoginModule</code>
    1.15   * @author fiki
    1.16   */
    1.17  public class SQLLoginModul extends AppservPasswordLoginModule {
    1.18 +
    1.19 +	/** viz konfigurace v login.conf */
    1.20 +	public static final String VÝCHOZÍ_JAAS_KONTEXT = "sqlRealm";
    1.21 +	private static final Logger log = Logger.getLogger(SQLLoginModul.class.getName());
    1.22 +
    1.23 +	@Override
    1.24 +	protected void authenticateUser() throws LoginException {
    1.25 +
    1.26 +		if (_currentRealm instanceof SQLRealm) {			
    1.27 +		
    1.28 +			SQLRealm sqlRealm = (SQLRealm)_currentRealm;			
    1.29 +			String skupiny[] = sqlRealm.ověřUživatele(_username, _passwd);			
    1.30 +			commitUserAuthentication(skupiny);
    1.31 +			
    1.32 +		} else {
    1.33 +			throw new LoginException("Špatný realm: " + _currentRealm + " Očekávám: SQLRealm.");
    1.34 +		}
    1.35 +	}
    1.36  }
     2.1 --- a/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLRealm.java	Thu Jul 21 20:35:23 2011 +0200
     2.2 +++ b/java/sql-java-prihlasovani/src/cz/frantovo/jaas/sql/SQLRealm.java	Thu Jul 21 23:40:45 2011 +0200
     2.3 @@ -1,22 +1,64 @@
     2.4  package cz.frantovo.jaas.sql;
     2.5  
     2.6  import com.sun.appserv.security.AppservRealm;
     2.7 -import com.sun.enterprise.security.auth.realm.InvalidOperationException;
     2.8 +import com.sun.enterprise.security.auth.realm.BadRealmException;
     2.9 +import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
    2.10  import com.sun.enterprise.security.auth.realm.NoSuchUserException;
    2.11  import java.util.Enumeration;
    2.12 +import java.util.Properties;
    2.13 +import java.util.logging.Level;
    2.14 +import java.util.logging.Logger;
    2.15 +import javax.security.auth.login.LoginException;
    2.16  
    2.17  /**
    2.18 + * Bezpečnostní doména. 
    2.19 + * Uživatelé jsou uloženi v SQL databázi.
    2.20   * @author fiki
    2.21   */
    2.22  public class SQLRealm extends AppservRealm {
    2.23  
    2.24 +	private static final String AUTH_TYPE = "Ověřuje uživatele proti SQL databázi.";
    2.25 +	private static final Logger log = Logger.getLogger(SQLRealm.class.getName());
    2.26 +
    2.27  	@Override
    2.28 -	public String getAuthType() {
    2.29 -		throw new UnsupportedOperationException("Not supported yet.");
    2.30 +	public void init(Properties parametry) throws BadRealmException, NoSuchRealmException {
    2.31 +		super.init(parametry);
    2.32 +
    2.33 +		String jaasContext = parametry.getProperty(JAAS_CONTEXT_PARAM, SQLLoginModul.VÝCHOZÍ_JAAS_KONTEXT);
    2.34 +		setProperty(JAAS_CONTEXT_PARAM, jaasContext);
    2.35 +
    2.36 +		log.log(Level.INFO, "SQLRealm úspěšně vytvořen. JaasContext: {0}", jaasContext);
    2.37  	}
    2.38  
    2.39  	@Override
    2.40 -	public Enumeration getGroupNames(String string) throws InvalidOperationException, NoSuchUserException {
    2.41 -		throw new UnsupportedOperationException("Not supported yet.");
    2.42 +	public String getAuthType() {
    2.43 +		return AUTH_TYPE;
    2.44 +	}
    2.45 +
    2.46 +	/**
    2.47 +	 * @param uživatel přihlašovací jméno uživatele
    2.48 +	 * @return seznam skupin, ve kterých se daný uživatel nachází
    2.49 +	 * @throws NoSuchUserException když uživatel s tímto jménem neexistuje.
    2.50 +	 */
    2.51 +	@Override
    2.52 +	public Enumeration getGroupNames(String uživatel) throws NoSuchUserException {
    2.53 +		throw new NoSuchUserException("Metoda zatím není implementována. Uživatel: " + uživatel);
    2.54 +	}
    2.55 +
    2.56 +	/**
    2.57 +	 * 
    2.58 +	 * @param jméno uživatelské jméno
    2.59 +	 * @param heslo heslo
    2.60 +	 * @return seznam skupin, do kterých uživatel patří
    2.61 +	 */
    2.62 +	public String[] ověřUživatele(String jméno, char[] heslo) throws LoginException {
    2.63 +
    2.64 +		// TODO: skutečně ověřovat heslo proti databázi
    2.65 +
    2.66 +		if (heslo != null && heslo.length == 3) {
    2.67 +			return new String[]{"bezny"};
    2.68 +		} else {
    2.69 +			throw new LoginException("Heslo musí mít tři znaky :-P");
    2.70 +		}
    2.71  	}
    2.72  }