|
Hi,
i'm currently trying to migrate an old OF 3.9 application (Integrated deployment) to OF 4.9 CE. In 3.9, i've used authetication in web.xml as described here: http://wiki.orbeon.com/forms/doc/developer-guide/authentication . Log-in works fine; but i don't find a way to handle log-out correctly in 4.9. If possible, i would prefer to keep the integrated deployment situation because otherwise, i would have to replace the complete logic from the pfc by another mechanism. In 3.9, i've used a page flow entry that calls a log-out xpl. In that XPL, i first called the <p:processor name="oxf:session-invalidator"/>, and afterwards, a redirect to a static html page telling the user that log-out was succesful. The logout was triggered by a xforms:submission from one of the content XForms pages. This worked perfectly fine. In 4.9, proceeding this way throws an error:
+----------------------------------------------------------------------------------------------------------------------+
|An Error has Occurred |
|----------------------------------------------------------------------------------------------------------------------|
|getAttribute: Session already invalidated |
|----------------------------------------------------------------------------------------------------------------------|
|Application Call Stack |
|----------------------------------------------------------------------------------------------------------------------|
|https://localhost:8443/dokdb/logout | | |
|oxf:/ops/pfc/xforms-xml-submission.xpl |executing processor | 50|
|······················································································································|
|element=<p:processor name="oxf:pipeline">[...]</p:processor> |
|name ={http://www.orbeon.com/oxf/processors}pipeline |
|----------------------------------------------------------------------------------------------------------------------|
|oxf:/ops/xforms/xforms-server-submit.xpl |executing processor | 70|
|······················································································································|
|element=<p:processor name="oxf:xforms-server">[...]</p:processor> |
|name ={http://www.orbeon.com/oxf/processors}xforms-server |
|----------------------------------------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------------------------------------|
|Exception: java.lang.IllegalStateException |
|----------------------------------------------------------------------------------------------------------------------|
|org.apache.catalina.session.StandardSession |getAttribute |StandardSession.java |1204|
|org.apache.catalina.session.StandardSessionFacade |getAttribute |StandardSessionFacade.java | 108|
|rg.orbeon.oxf.pipeline.InitUtils$SessionMap$$anon$1|getAttribute |InitUtils.scala | 239|
|org.orbeon.oxf.util.AttributesToMap |put |AttributesToMap.java | 37|
|org.orbeon.oxf.util.AttributesToMap |put |AttributesToMap.java | 21|
|tionState$$anonfun$saveHttpState$1$$anonfun$apply$4|apply |Connection.scala | 246|
|tionState$$anonfun$saveHttpState$1$$anonfun$apply$4|apply |Connection.scala | 246|
|scala.Option |foreach |Option.scala | 236|
|n.oxf.util.ConnectionState$$anonfun$saveHttpState$1|apply |Connection.scala | 245|
|n.oxf.util.ConnectionState$$anonfun$saveHttpState$1|apply |Connection.scala | 244|
|scala.Option |foreach |Option.scala | 236|
|org.orbeon.oxf.util.ConnectionState$class |saveHttpState |Connection.scala | 244|
|org.orbeon.oxf.util.Connection |saveHttpState |Connection.scala | 51|
|org.orbeon.oxf.util.Connection |connect |Connection.scala | 207|
|----------------------------------------------------------------------------------------------------------------------|
In the logs, i see there's an additional request after processing the /logout request; the additional request points to the last page the user called before triggering the log-out:
2015-07-03 15:36:06,443 http-nio-8443-exec-22 DEBUG processor.XFormsServer - start submission second pass {id: "logout-submission"}
2015-07-03 15:36:06,449 http-nio-8443-exec-22 DEBUG processor.XFormsServer - checking whether local portlet submission is allowed {resource: "/logout", container type: "servlet", deployment type: "standalone"}
2015-07-03 15:36:06,455 http-nio-8443-exec-22 DEBUG processor.XFormsServer - skipping local portlet submission {reason: "container type is not portlet"}
2015-07-03 15:36:06,455 http-nio-8443-exec-22 DEBUG processor.XFormsServer - checking whether request dispatcher submission is allowed {resource: "/logout", noscript: "false", is asynchronous: "false", container type: "servlet", norewrite: "false", local-submission-forward: "true", local-submission-include: "false"}
2015-07-03 15:36:06,456 http-nio-8443-exec-22 DEBUG processor.XFormsServer - skipping request dispatcher servlet submission {reason: "deployment type is not separate"}
2015-07-03 15:36:06,456 http-nio-8443-exec-22 DEBUG processor.XFormsServer - start connecting {type: "regular"}
2015-07-03 15:36:06,467 http-nio-8443-exec-22 DEBUG processor.XFormsServer - loaded HTTP state {scope: "session"}
2015-07-03 15:36:06,467 http-nio-8443-exec-22 DEBUG processor.XFormsServer - end connecting {time (ms): "11"}
2015-07-03 15:36:06,467 http-nio-8443-exec-22 DEBUG processor.XFormsServer - end submission second pass {time (ms): "24"}
2015-07-03 15:36:06,506 http-nio-8443-exec-22 DEBUG processor.XFormsServer - state manager - Document is dirty. Generating new dynamic state.
2015-07-03 15:36:06,506 http-nio-8443-exec-22 DEBUG processor.XFormsServer - state manager - Keeping document in cache.
2015-07-03 15:36:06,507 http-nio-8443-exec-22 DEBUG processor.XFormsServer - start opening connection
2015-07-03 15:36:06,513 http-nio-8443-exec-22 INFO webapp.ProcessorService - /logout - Received request
2015-07-03 15:36:06,587 http-nio-8443-exec-22 INFO webapp.ProcessorService - Session listener - Session destroyed.
2015-07-03 15:36:06,590 http-nio-8443-exec-22 INFO webapp.ProcessorService - /logout - Timing: 77
2015-07-03 15:36:06,591 http-nio-8443-exec-22 DEBUG processor.XFormsServer - opening URL connection {method: "POST", URL: "https://localhost:8443/dokdb/logout", User-Agent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0", Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", Content-Type: "application/xml", Orbeon-Token: "da9dc29f63efd83e95bf15a4669711290196c946"}
2015-07-03 15:36:06,592 http-nio-8443-exec-22 DEBUG processor.XFormsServer - response {status code: "200"}
2015-07-03 15:36:06,593 http-nio-8443-exec-22 DEBUG processor.XFormsServer - response has no content
2015-07-03 15:36:06,593 http-nio-8443-exec-22 DEBUG processor.XFormsServer - end opening connection {time (ms): "86"}
2015-07-03 15:36:06,614 http-nio-8443-exec-22 ERROR controller.PageFlowControllerProcessor - error caught {controller: "oxf:/page-flow.xml", method: "POST", path: "/bereiche"}
2015-07-03 15:36:06,701 http-nio-8443-exec-22 ERROR controller.PageFlowControllerProcessor -
+----------------------------------------------------------------------------------------------------------------------+
|An Error has Occurred |
|----------------------------------------------------------------------------------------------------------------------|
|getAttribute: Session already invalidated |
....
"/bereiche" if the XForms with the Logout trigger, originating the logout submission; "/logout" is the logout action. I suppose it's a matter of state handling - maybe the XForms engine, after invalidating the session, still tries to do something with the last document in use before the logout submission. So, my question is: how do i issue a redirect after invalidation the session? Is there an example how to use the oxf:session-invalidator correctly? Thanks in advance! fs |
|
Administrator
|
Hi Florian, At some point the server started checking that when it gets a request, it is "attached" to the correct session. So I'm not completely surprised that you could have a problem in this case. Here is what I'd suggest: instead of in XForms running a submission that runs XPL invalidating the session and then loading a "logged out" page, what about in XForms you just load that page, and in the page-flow.xml, for that page, in the <page model="..."> you run the XPL that invalidates the session? Would something like that work for you? Alex On Fri, Jul 3, 2015 at 6:47 AM, fl.schmitt(ops-users) <[hidden email]> wrote: Hi, You received this message because you are subscribed to the Google Groups "Orbeon Forms" group. To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email]. To post to this group, send email to [hidden email].
--
Follow Orbeon on Twitter: @orbeon Follow me on Twitter: @avernet |
|
Hi Alex,
thanks a lot for your help - your solution works perfectly nice ! I've replaced the xf:submission by a simple xf:trigger/xf:load to call the logout XPL. Now, invalidating the session and redirecting the user to a static page works fine.
Florian |
|
Administrator
|
Hi Florian, Excellent, I am very glad it's working, and thank you for the update. Alex On Mon, Jul 6, 2015 at 12:10 AM, fl.schmitt(ops-users) <[hidden email]> wrote: Hi Alex, You received this message because you are subscribed to the Google Groups "Orbeon Forms" group. To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email]. To post to this group, send email to [hidden email].
--
Follow Orbeon on Twitter: @orbeon Follow me on Twitter: @avernet |
| Free forum by Nabble | Edit this page |
