Napojení na SQL databázi.
1 package cz.frantovo.jaas.sql;
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;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
11 import javax.security.auth.login.LoginException;
14 * Přihlašovací modul pro SQL doménu.
16 * TODO: později bude potomkem
17 * <code>com.sun.appserv.security.AbstractLoginModule</code>
21 public class SQLLoginModul extends AppservPasswordLoginModule {
24 * viz konfigurace v login.conf
26 public static final String VÝCHOZÍ_JAAS_KONTEXT = "sqlRealm";
27 private static final Logger log = Logger.getLogger(SQLLoginModul.class.getName());
30 protected void authenticateUser() throws LoginException {
31 if (_currentRealm instanceof SQLRealm) {
33 SQLRealm sqlRealm = (SQLRealm) _currentRealm;
34 sqlRealm.ověřUživatele(_username, _passwd);
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);
44 throw new LoginException("Špatný realm: " + _currentRealm + " Očekávám: SQLRealm.");
49 * Převede výčet na pole
51 private static String[] poleSkupin(Enumeration<String> e) {
52 List<String> l = new ArrayList<>();
53 while (e.hasMoreElements()) {
54 l.add(e.nextElement());
56 return l.toArray(new String[0]);