Danke für die Links!
Ich habe mich an den Tutorials JDBC Security Realm and form based Authentication on GlassFish with Primefaces und JDBC Realm and Form Based Authentication with GlassFish 3.1.2.2 and Primefaces 3.4 - DZone orientiert.
Das Debugging habe ich auf Finest umgestellt und im GlassfishServer den Realm nicht in der „default-config“ sondern im „server-config“ gesetzt.
Außerdem habe ich bemerkt, dass die DataSource im Webprojekt welche in der persistence.xml steht nicht zwangsläufig in den GlassfishServer Resources vorhanden sein muss. Bei mir war diese zufälligerweise gleich benannt wie in der persistence.xml somit sollte die Verbindung zur MySQL DB in Ordnung sein.
Die DB Struktur musste ich ändern, da die alte nicht druchdacht ware. Man konnte einem Benutzer nur eine Gruppe zuweisen. Außerdem sollte ich damit diesem Problem http://www.java-forum.org/allgemeines-ee/126421-benutzerauthentifizierung.html aus dem Weg gegangen sein.
[SQL]CREATE TABLE IF NOT EXISTS c_user
(
NAME
varchar(15) NOT NULL,
PASSWORD
varchar(45) default NULL,
PRIMARY KEY (NAME
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO c_user
(NAME
, PASSWORD
) VALUES
(‚martin‘, ‚admin‘);
CREATE TABLE IF NOT EXISTS c_user_c_user_role
(
User_NAME
varchar(15) NOT NULL,
Role_ROLENAME
varchar(15) NOT NULL,
PRIMARY KEY (User_NAME
,Role_ROLENAME
),
KEY FK_c_user_c_user_role_Role_ROLENAME
(Role_ROLENAME
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO c_user_c_user_role
(User_NAME
, Role_ROLENAME
) VALUES
(‚martin‘, ‚Koch‘);
CREATE TABLE IF NOT EXISTS c_user_role
(
ROLENAME
varchar(15) NOT NULL,
PRIMARY KEY (ROLENAME
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO c_user_role
(ROLENAME
) VALUES
(‚Koch‘);
[/SQL]
In der Web.xml ist der <realm-name>loginRealm</realm-name>
angegeben woraus sich folgende Konfiguration im Glassfish ergeben hat:
JAAS Context: loginRealm
JNDI:fesnas
UserTable:c_user
User Name Column: NAME
Password Column: PASSWORD
Group Table: c_user_c_user_role
Group Table User Name Column: User_NAME
Group Name Column: Role_ROLENAME
Password Encryption Algorithm: none
Digest Algorithm: none
Trotzdem erhalte ich nach wie vor beim login ausgelöst durch request.login(username, password);
die Fehlermeldung:
WARNING: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: No LoginModules configured for loginRealm
SEVERE: javax.servlet.ServletException: Login failed
Es scheint als würde er den loginReam welche im Web.xml angegeben ist nicht finden. Im Web erstellen manche dazu eine jaas.config aber eine solche ist in den oberen angegeben Tutorials nicht angegeben.