I struggled the last couple of days with the login part of my web application. I have reached such an extent that I can successfully authenticate a user using JDBCRealm on tomcat (reading users from a SQL Server database). Now I want to send some kind of feedback when the user account is locked or when the credentials are incorrect, this is where I am stuck right now.
I wanted to use this:
try { request.login(request.getParameter("user"), request.getParameter("pass")); } catch (ServletException se) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Wrong Username/Password combination")); log(se.getMessage()); }
But FacesContext.getCurrentInstance () always returns null ..
After some research, it turned out that the request should come from a page located in / faces in order to call FacesServlet, and FacesContext gets initialized (at least what I understood).
So, I moved the login page to a new folder with the names of the faces inside the web pages folder. But now every time I try to call the login.xhtml page, I get this error:
/login.xhtml Not Found in ExternalContext as a Resource
And this is stacktrace:
com.sun.faces.context.FacesFileNotFoundException: /login.xhtml Not Found in ExternalContext as a Resource at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:232) at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:273) at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:201) at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:764) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619)
I get this error even when I enter the URL directly into the browser.
Im using Netbeans 7.1 with Apache Tomcat 7 (which, by the way, is a pain because I get a lot of PermGen memory exceptions due to -.-)
Any help on how to fix this would be greatly appreciated.
Andrei Dvoynos
source share