我们在使用Flex 4,BlazeDS和WebLogic 10.3.5在我们的Flex应用程序中重新登录时遇到问题。
导致问题的用例如下:
登录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获得了第二个会话,而第一个会话仍然有效且活跃。
有谁知道,这确实导致了这个问题以及如何优雅地解决它们?我有一些提示,但不知道它们是否足够合适:
我将不胜感激任何建议,解释和建议。感谢。
答案 0 :(得分:1)
问题在于会话固定。
会发生什么:
Spring的SessionFixationProtectionStrategy:
当旧会话被破坏时,FlexSession变为“无效”。
创建会话时会再次创建FlexSessions, 并且由于策略传递了相同的引用,该引用无效 (厚厚的俄语口音)“我们有问题”
通过将策略bMigrateAttributes
设置为false,可以轻松解决此问题:
<security:session-management session-authentication-strategy-ref="sas" />
<bean id="sas class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy" p:migrateSessionAttributes="false"/>
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/session-mgmt.html
希望这会有所帮助
答案 1 :(得分:0)
我遇到了同样的问题,但是我想保留所有会话属性,不仅是Spring的,因此我没有将 migrateSessionAttributes 设置为false来保留非spring的属性。会话固定属性。
我最终覆盖了 SessionFixationProtectionStrategy ,因此我仍然可以从会话固定中受益,它将迁移所有属性。
在 onSessionChange 方法中,我专门删除了“ __flexSession”属性
muscle pain (pain)