Skip to main content

JDBC Realm Glassfish 4.0 - SEC1112: Cannot validate user [...] for JDBC realm

Please note these java.net forums are being decommissioned and use the new and improved forums at https://community.oracle.com/community/java.
No replies
khrau
Offline
Joined: 2014-01-23

I tried to to buid up a JDBC Realm and test it with a simple example. The example works well with a file Realm.
My error message is:
SEVERE: SEC1112: Cannot validate user [hugo@khrau.de] for JDBC realm.
WARNING: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
SEVERE: javax.servlet.ServletException: Login failed
at org.apache.catalina.authenticator.AuthenticatorBase.doLogin(AuthenticatorBase.java:959)
at org.apache.catalina.authenticator.AuthenticatorBase.login(AuthenticatorBase.java:939)
at org.apache.catalina.connector.Request.login(Request.java:2245)
at org.apache.catalina.connector.Request.login(Request.java:2224)
at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1113)
at beans.LoginBean.doLogin(LoginBean.java:53)
at beans.LoginBean$Proxy$_$$_WeldClientProxy.doLogin(Unknown Source)
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:606)
at javax.el.ELUtil.invokeMethod(ELUtil.java:326)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:536)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:269)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
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:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
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:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:724)
SEVERE: javax.servlet.ServletException: Login failed
at org.apache.catalina.authenticator.AuthenticatorBase.doLogin(AuthenticatorBase.java:959)
at org.apache.catalina.authenticator.AuthenticatorBase.login(AuthenticatorBase.java:939)
at org.apache.catalina.connector.Request.login(Request.java:2245)
at org.apache.catalina.connector.Request.login(Request.java:2224)
at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1113)
at beans.LoginBean.doLogin(LoginBean.java:53)
at beans.LoginBean$Proxy$_$$_WeldClientProxy.doLogin(Unknown Source)
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:606)
at javax.el.ELUtil.invokeMethod(ELUtil.java:326)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:536)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:269)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
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:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
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:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:724)

My glassfish Realm Configuation is

Realm-Name:

userRealm
Klassenname:

com.sun.enterprise.security.ee.auth.realm.jdbc.JDBCRealm

Klassenspezifische Eigenschaften
JAAS-Kontext: Pflichtfeld

ID für das für diese Realm zu verwendende Anmeldemodul
JNDI: Pflichtfeld

JNDI-Name der JDBC-Ressource, die von dieser Realm verwendet wird
Benutzertabelle: Pflichtfeld

Name der Datenbanktabelle, die die Liste der autorisierten Benutzer für diese Realm enthält
Benutzernamenspalte: Pflichtfeld

Name der Spalte in der Benutzertabelle, die die Liste der Benutzernamen enthält
Kennwortspalte: Pflichtfeld

Name der Spalte in der Benutzertabelle, die die Benutzerkennwörter enthält
Gruppentabelle: Pflichtfeld

Name der Datenbanktabelle, die die Liste der Gruppen für diese Realm enthält
Gruppentabellen-Benutzernamenspalte:

Name der Spalte in der Benutzergruppentabelle, die die Liste der Gruppen für diese Realm enthält
Gruppennamenspalte: Pflichtfeld

Name der Spalte in der Gruppentabelle, die die Liste der Gruppennamen enthält
Kennwortverschlüsselungs-Algorithmus: Pflichtfeld

Dies bezeichnet den Algorithmus für die Verschlüsselung der Kennwörter in der Datenbank. Wenn Sie dieses Feld leer lassen, stellt dies ein Sicherheitsrisiko dar.
Gruppen zuweisen:

Durch Komma getrennte Liste der Gruppennamen
Datenbankbenutzer:

Geben Sie den Datenbankbenutzernamen in der Realm anstelle des JDBC-Connection Pools an
Datenbankkennwort:

Geben Sie das Datenbankkennwort in der Realm anstelle des JDBC-Connection Pools an
Digest-Algorithmus:

Digest-Algorithmus (Standard ist SHA-256). Beachten Sie, dass der Standard in Versionen vor GlassFish 3.1 "MD5" lautete
Codierung:

Codierung (zulässige Werte: Hex und Base64)
Zeichensatz:

Zeichensatz für den Digest-Algorithmus

My web.xml is:

<?xml version="1.0" encoding="UTF-8"?>
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

javax.faces.PROJECT_STAGE Development

Faces Servlet
javax.faces.webapp.FacesServlet
1


Faces Servlet
/faces/*


Faces Servlet
/jdbcAuth/*



30



faces/index.xhtml


FORM
userRealm /faces/login.xhtml /error.faces


Constraint1

secure

/secure/*
GET
POST



Administrator1



Constraint2

secure2

/secure2/*
GET
POST



Student




Administrator1



Student

Login with JSF and Managed Bean

JSF:
<?xml version='1.0' encoding='UTF-8' ?>

xmlns:h="http://java.sun.com/jsf/html">

Login Form


Hier ist login







value="#{loginBean.username}" required="true"
requiredMessage="Please enter User Name"/>




value="#{loginBean.password}" required="true"
requiredMessage="Please enter Password"/>





Login Bean
@RequestScoped
@Named
public class LoginBean {

private String username;
private String password;

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password; }

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public LoginBean() {
}
public String doLogin(){
FacesContext facesContext=FacesContext.getCurrentInstance();
HttpServletRequest request=(HttpServletRequest)
facesContext.getExternalContext().getRequest();
try {
System.out.println(username+" "+password);
request.login(username, password);
} catch (ServletException ex) {
ex.printStackTrace();
Logger.getLogger(LoginBean.class.getName()).log(Level.SEVERE, null, ex);
facesContext.addMessage(null, new FacesMessage("Login failed"));
username="";
password="";
return "login.xhtml";
}
return "secure/index.faces";
}
public void doLogout(){
FacesContext facesContext=FacesContext.getCurrentInstance();
HttpServletRequest request=(HttpServletRequest)
facesContext.getExternalContext().getRequest();
try {
request.logout();
} catch (ServletException ex) {
Logger.getLogger(LoginBean.class.getName()).log(Level.SEVERE, null, ex);
facesContext.addMessage(null, new FacesMessage("Logout failed"));
}
}
}

JDBC Resource
JDBC-Ressource bearbeiten

Bearbeiten Sie eine vorhandene JDBC-Datenquelle.
JNDI-Name:

usersTest
Poolname:

Auf der Seite JDBC-Connection Pools können Sie neue Pools erstellen
Deployment-Reihenfolge:

Gibt die Ladereihenfolge der Ressource beim Hochfahren des Servers an. Niedrigere Nummern werden zuerst geladen.
Beschreibung:

Connextion Pool:

JDBC-Connection Pool bearbeiten

Ändern Sie einen vorhandenen JDBC-Connection Pool. Ein JDBC-Connection Pool ist eine Gruppe wiederverwendbarer Verbindungen für eine bestimmte Datenbank.
Sternchen Kennzeichnet Pflichtfelder
Allgemeine Einstellungen
Poolname:

mysql_user_rootPool
Ressourcentyp:

Muss angegeben werden, wenn die Datenquellenklasse mehr als 1 Schnittstelle implementiert.
Klassenname der Datenquelle:

Herstellerspezifischer Klassenname, der die DataSource- und/oder XADataSource-APIs implementiert
Treiberklassenname:

Herstellerspezifischer Klassenname, der die java.sql.Driver-Schnittstelle implementiert.
Ping:

Aktiviert
Wenn dies aktiviert ist, wird während der Erstellung oder Neukonfiguration ein Pingsignal an den Pool gesendet, um bei falschen Attributwerten eine Warnmeldung anzuzeigen
Deployment-Reihenfolge:

Gibt die Ladereihenfolge der Ressource beim Hochfahren des Servers an. Niedrigere Nummern werden zuerst geladen.
Beschreibung:

Pooleinstellungen
Ursprüngliche und minimale Poolgröße:

Verbindungen
Minimale und ursprüngliche Anzahl Verbindungen, die im Pool gehalten werden
Maximale Poolgröße:

Verbindungen
Maximale Anzahl Verbindungen, die erstellt werden können, um Clientanforderungen zu erfüllen
Poolskalierungsmenge:

Verbindungen
Anzahl zu entfernende Verbindungen, wenn das Leerlauf-Timeout des Pools abläuft
Leerlauf-Timeout:

Sekunden
Maximale Dauer, für die eine Verbindung im Pool im Leerlauf bleiben kann
Max. Wartezeit:

Millisekunden
Die Zeit, die der Caller wartet, bis das Verbindungs-Timeout gesendet wird
Transaktion
Nicht transaktionsbezogene Verbindungen:

Aktiviert
Gibt nicht transaktionsbezogene Verbindungen zurück
Transaktionsisolierung:

Falls kein Wert angegeben ist, verwenden Sie die Standardebene für den JDBC-Treiber
Isolierungsebene:

Garantiert
Alle Verbindungen verwenden dieselbe Isolierungsebene. Transaktionsisolierung erforderlich

Status:

Aktiviert