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]);
+ }
}