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"?>
30
Login with JSF and Managed Bean
JSF:
<?xml version='1.0' encoding='UTF-8' ?>
Hier ist login
requiredMessage="Please enter User Name"/>
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