Jde to zkompilovat a spustit. Umí přihlásit i nepřihlásit uživatele. K databázi se zatím nepřipojuje.
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 }