Flex 4、BlazeDS、および WebLogic 10.3.5 を使用して Flex アプリケーションに再ログインすると問題が発生します。
問題を引き起こすユースケースは次のようなものです。
- ブラウザでアプリケーションを起動します。
- j_security_check アクションでログイン フォーム ページにリダイレクトします。
- ログインしてアプリケーションを使用する。
- ブラウザの「戻る」ボタンを押します。
- 再びログインフォームページに来ます。
- 再度ログインします。
- BlazeDS で例外を取得し、Flex/ActionScript で障害をキャッチします。
WLS のログでキャッチされた例外:
[BlazeDS]Unexpected error encountered in Message Broker servlet
flex.messaging.LocalizedException: The FlexSession is invalid.
at flex.messaging.FlexSession.checkValid(FlexSession.java:943)
at flex.messaging.FlexSession.getUserPrincipal(FlexSession.java:254)
at flex.messaging.HttpFlexSession.getUserPrincipal(HttpFlexSession.java:286)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:296)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Flex/ActionScript でキャッチされた障害:
faultCode: Client.Error.MessageSend
faultString: Send failed
faultDetail: Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 500: url: 'http://server:port/web-project/messagebroker/amf'
最初のセッションがまだ有効でアクティブな間に、BlazeDS が 2 番目のセッションを取得しているようです。
それがまさにこの問題の原因であり、それらをエレガントに解決する方法を知っている人はいますか? いくつかのヒントがありますが、それらが十分に適しているかどうかわかりません:
- Flex/ActionScript で障害をキャッチし、ログアウト ページにリダイレクトしてセッションを無効にしてから、ログイン ページにリダイレクトして新しいセッションを作成します。
- JavaScriptでブラウザの「戻る」ボタンを無効にします。
提案、説明、アドバイスをいただければ幸いです。ありがとう。