ERLEDIGT
JA
JA
ANTWORTEN
0
0
ZUGRIFFE
1350
1350
EMPFEHLEN
-
Hallo,
mein jdbcRealm scheint nicht zu funktionieren und ich hoffe ihr könnt mir helfen.
Nach 2 Wochen Internetrecherche und probieren, wage ich es überhaupt einen neuen Eintrag zu erstellen. Ich versuche erstmalig JEE definierte Security einzurichten, ohne groß selbst etwas zu entwickeln. Über normale user-password Kombination, soll man auf geschützte Webseiten zugreifen können. Es soll die Gruppen admin und member geben. Ich glaub, damit dürfte ich erstmal klarkommen.
Folgende gute Tutorial-Seite konnte ich bisher ausmachen:
http://blog.triona.de/ (Java-EE-Webapplikation absichern)
Folgende Punkte müssen demnach gemacht werden:
1. MYSQL: Mysql-Tabellen einrichten
2. GLASSFISH: Datenbankverbindung Glassfish bekanntgeben
3. GLASSFISH: JNDI mit der Verbindung einrichten
4. GLASSFISH: jdbcRealm einrichten
5. APPLIKATION: Sicherheitseinstellungen in web.xml und glassfish-web.xml
6. APPLIKATION: JSF-Login-Seite erstellen
Die Punkte 5. und 6. konnte ich schon prüfen. Sie sind korrekt, da ich schon erfolgreich ein fileRealm ('file') testen konnte. Auch Punkt 2. ist durch den erfolgreichen Ping bereits als korrekt bestätigt?! Aber wie teste ich die anderen Punkte?
aus der web.xml nur den realm-name geändert, sieht der snipped nun so aus:
aus dem server.log:Code :1 2 3 4 5 6 7 8
<login-config> <auth-method>FORM</auth-method> <realm-name>loginRealm</realm-name> <form-login-config> <form-login-page>/login.xhtml</form-login-page> <form-error-page>/loginFailed.xhtml</form-error-page> </form-login-config> </login-config>
Allerdings weiß ich hier ja nicht, was er sich beim jdbc eingelesen hat.Code :1 2
Information: SEC1115: Realm [file] of classtype [com.sun.enterprise.security.auth.realm.file.FileRealm] successfully created. Information: SEC1115: Realm [loginRealm] of classtype [com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm] successfully created.
So hab ich den Punkt "1. MYSQL: Mysql-Tabellen einrichten" umgesetzt.
Meine Datenbank sieht so aus:
und hiermit sehr billig gefüllt:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CREATE TABLE USER( username VARCHAR(128) NOT NULL PRIMARY KEY , password VARCHAR(128) NOT NULL, INDEX (username) ); create table USERGROUP( username varchar(128) NOT NULL, groupid varchar(128) NOT NULL, PRIMARY KEY (username, groupid), INDEX (username), FOREIGN KEY (username) REFERENCES USER(username) ON UPDATE CASCADE ON DELETE RESTRICT );
Code :1 2
INSERT INTO USER ( username , password)VALUES ('admin', 'admin'); INSERT INTO USERGROUP ( username , groupid) VALUES ('admin', 'admin');
2. GLASSFISH: Datenbankverbindung Glassfish bekanntgeben
Meine ausgeführten Schritte:
Seite 1:C:\Program Files\MySQL\MySQL Connector J\mysql-connector-java-5.1.15-bin.jar kopieren nach Glassfish\lib.
- Admin Konsole von Glassfish öffnen: Glassfish starten, http://localhost:4848/ (admin, changeit)
- "Ressourcen" -> "JDBC" -> "JDBC Verbindungspools" -> "Neu"
Seite 2:Poolname: Mysql
Ressourcentyp: javax.sql.ConnectionPoolDataSource
Datenbanktreiber-Hersteller: MySql
Wenn der Glassfish Server den Treiber gefunden hat, ergänzt er automatisch den Klassennamen der Datenquelle mit "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource".
- PING muss erfolgreich sein. Ist es auchDatabaseName: <dbname>
User: root
Password: admin
URL: jdbc:mysql://localhost:3306/<dbname>
Url: jdbc:mysql://localhost:3306/<dbname>
ServerName: MySQLServer
3. GLASSFISH: JNDI mit der Verbindung einrichten
Kann ich davon ausgehen, dass das jetzt einfach funktioniert? War ja nicht viel einzustellen. Wie könnte man JNDI testen?"JDBC"->"JDBC Ressourcen"
JNDI-Name: jdbc/mysql
Poolname: MySQL (Dropdown: hatte er fein erkannt und übernommen aus dem gerade erstellten Verbindungspool)
4. GLASSFISH: jdbcRealm einrichten
Wie kann man nun prüfen, ob nun mein "admin" korrekt aus der Datenbank in dieses Realm eingeflossen ist?Admin Konsole von Glassfish öffnen
"Konfiguration" -> "server-config" -> "Sicherheit" -> "Bereiche" --> Neu
Name: loginRealm
Klassenname: com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm
JAAS-Kontext: loginRealm
JNDI: jdbc/mysql
Benutzertabelle: USER
Benutzernamenspalte: username
Passwortspalte: password
Gruppentabelle: USERGROUP
Gruppennamenspalte: groupid
Digest-Algorithmus: none
Aus dem oberen server.log wurde scheinbar das Realm als loginRealm "korrekt" eingerichtet.
Dennoch kommt bei login "admin"/"admin" der Fehler
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
Warnung: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Für loginRealm sind keine LoginModules konfiguriert Warnung: Exception com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Für loginRealm sind keine LoginModules konfiguriert at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153) at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:512) at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:453) at org.apache.catalina.connector.Request.login(Request.java:1932) at org.apache.catalina.connector.Request.login(Request.java:1895) at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1146) at de.familienschaetze.LoginBean.login(LoginBean.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.sun.el.parser.AstValue.invoke(AstValue.java:234) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: javax.security.auth.login.LoginException: Für loginRealm sind keine LoginModules konfiguriert at javax.security.auth.login.LoginContext.init(LoginContext.java:273) at javax.security.auth.login.LoginContext.<init>(LoginContext.java:382) at javax.security.auth.login.LoginContext.<init>(LoginContext.java:459) at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:381) ... 49 more Schwerwiegend: javax.servlet.ServletException: Exception thrown while attempting to authenticate for user: admin at org.apache.catalina.connector.Request.login(Request.java:1964) at org.apache.catalina.connector.Request.login(Request.java:1895) at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1146) at de.familienschaetze.LoginBean.login(LoginBean.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.sun.el.parser.AstValue.invoke(AstValue.java:234) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: javax.servlet.ServletException: Failed login while attempting to authenticate user: admin at org.apache.catalina.connector.Request.login(Request.java:1935) ... 44 more
Die Exception wird genau bei login() geworfenCode :1 2 3
final FacesContext fc = FacesContext.getCurrentInstance(); final HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest(); request.login(username, password);
Dass LoginModules nicht konfiguriert sind, habe ich gerade beim erstellen des Threads gesehen. Was ich da tun muss und warum das nicht im Tutorial beschrieben war, überprüfe ich jetzt. Über Hilfe würde ich mich freuen, da ich bald am Ende meiner Nerven bin.
Gruß
Marco
edit:
ich hab nun unter<domain-dir>/config/login.conf die LoginModule zu den vorhanden Realms gefunden.
Code :1 2 3 4 5 6 7 8 9
fileRealm { com.sun.enterprise.security.auth.login.FileLoginModule required; }; ... jdbcRealm { com.sun.enterprise.security.auth.login.JDBCLoginModule required; };
Im Gegensatz zum FileLoginModule finde ich das JDBCLoginModule nicht im Applications-Classpath.
Ich muss mal sehen welche Bibliothek mir das zur Verfügung stellt. Bin ich auf dem richtigen Weg?
Ich habe gerade gesehen, dass ich das FileLoginModule über com.sun.jmx.remote.security gefunden hab.
Ist aber nonsense.
Weil: auth über fileRealm hatte funktioniert --> demnach wurde auch com.sun.enterprise.security.auth.login.FileLoginModule gefunden.
Warum sollte nun com.sun.enterprise.security.auth.login.JDBCLoginModule nicht existieren ****** Liegt im gleichen Paket und wird von Glassfish standardmäßig bereitgestellt.
Tschuldigt, dass ich so laut denke. Aber irgendwie hilft das.
edit2:
Einen Fehler hab ich nun gefunden. In der Realmdefinition muss
muss durchCode :1
JAAS-Kontext: loginRealm
ersetzt werden.Code :1
JAAS-Kontext: jdbcRealm
Wie schön, wenn man seine eigenen Probleme löst :PGeändert von sheel (27.11.11 um 13:32 Uhr) Grund: Vierfachpost
Ähnliche Themen
-
JSF2.0 + Spring + Hibernate Architektur
Von Patrick25FFM im Forum JavaAntworten: 1Letzter Beitrag: 12.04.11, 10:37 -
Spring Security JDBC Authentication
Von sebastianb im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 11.11.10, 11:08 -
[ASP.NET & C#.NET] Authentication über eine Datenbank
Von Pyrolexxiales im Forum .NET Web und KommunikationAntworten: 2Letzter Beitrag: 22.07.10, 10:46 -
http basic authentication über VBScript
Von Marcus2k im Forum ASPAntworten: 0Letzter Beitrag: 24.02.10, 09:31 -
SOAP with Attachments über Webservice, Glassfish, AXIS
Von reweiss im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 5Letzter Beitrag: 20.06.08, 12:32





Zitieren
Login





