S'authentifier dans une servlet via WebAuthentication
Bonjour,
Je veux sécuriser mon application web avec JAAS sous JBoss 4.2
L'appli utilise Struts.
En utilisant une authentification par formulaire avec login/mdp (j_security_check etc ) le systeme de sécurité se met bien en place, je recupere mon Principal et mes roles avec request.getUserPrincipal et request.isUserInRole.
Cependant le systeme de login de l'application est plus compliqué qu'un simple login/mdp et je voudrai authentifier l'utilisateur dans une servlet. J'ai vu que JBoss propose la classe WebAuthentication qui doit faire ca très bien.
Code:
1 2 3
|
WebAuthentication pwl = new WebAuthentication();
pwl.login(login, mdp); |
le probleme c'est que la classe WebAuthentication ne trouve pas de request valide :
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
|
Catch InvocationTargetException : |
java.lang.reflect.InvocationTargetException
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:585)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.IllegalStateException: request is null
at org.jboss.web.tomcat.security.login.WebAuthentication.login(WebAuthentication.java:80)
at com.staci.webcat3.action.AuthentificationAction.login(AuthentificationAction.java:98)
... 31 more |
en explorant un peu le code de WebAuthentication il récupère la request par :
Code:
1 2 3 4
|
Request request = (Request)SecurityAssociationValve.activeRequest.get();
/*avec Request de type org.apache.catalina.connector.Request*/ |
Or dans la doc de JBoss, SecurityAssociationValve n'a pas de parametre activeRequest.
Donc si qlu a une idée du pourquoi Jboss me trouve pas de requete, je suis preneur ;)
si vous avez besoin de plus d'info hésité pas a me demander.
Petite question subsidiaire : y a -t-il un moyen de recuperer l'objet org.apache.catalina.connector.Request à la place d'une FacadeRequest dans une servlet sous Struts ?