2011-03-17 5 views
4

Hé les gars, j'ai implémenté un login en utilisant un backing bean et une fonction request.login(). Cela fonctionne très bien, mais si la connexion échoue, cela génère une erreur désagréable. C'est bien parce que j'ai attrapé une erreur différente avant la main (ServletException) et je suis capable de passer à la bonne page. Il lève toujours la LoginException en arrière-plan. Donc, il remplit les journaux avec cette erreur.Programmatic Java EE 6 login: comment attraper le LoginException?

Voici ma méthode.

public String login() { 

    FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 

    try { 
     request.login(this.userName, this.password); 
     return "index?faces-redirect=true"; 
    } catch (Exception e) { 
     return "error?faces-redirect=true"; 
    } 

Ceci est la trace de la pile de l'erreur si la connexion de l'utilisateur échoue.

WARNING: Exception 
com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception 
    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:483) 
    at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:425) 
    at org.apache.catalina.connector.Request.login(Request.java:1916) 
    at org.apache.catalina.connector.Request.login(Request.java:1879) 
    at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1146) 
    at com.atlanticpkg.must.view.LoginBean.login(LoginBean.java:32) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43) 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56) 
    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:409) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 
    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:326) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    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:662) 
Caused by: javax.security.auth.login.LoginException: Security Exception 
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:856) 
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 
    at javax.security.auth.login.LoginContext.login(LoginContext.java:579) 
    at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:382) 
    ... 51 more 
Caused by: java.lang.SecurityException 
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:857) 

Je ne peux pas sembler attraper cette erreur. Si j'essaie de l'attraper, Netbeans me donne l'erreur qu'il n'est jamais lancé.

Répondre

2

Vous ne pouvez pas l'attraper parce qu'il n'a pas été lancé. Il vient d'être saisi et enregistré par le code interne du conteneur.

Ouvrez le fichier /domains/domain1/config/logging.properties et ajoutez la ligne suivante

com.sun.enterprise.security.level=SEVERE 

pour le laisser se connecter uniquement SEVERE journaux, ce qui est le plus haut niveau, plus élevé que WARNING.

+0

De rien. – BalusC