2012-08-08 2 views
1

Flex 4, BlazeDS 및 WebLogic 10.3.5를 사용하여 Flex 어플리케이션에서 다시 로그인하는 데 문제가 있습니다. .Flex에서 다시 로그인하면 Channel.Connect.Failed 오류가 발생합니다. NetConnection.Call.Failed : HTTP : Status 500 : url

문제를 일으키는 사용 사례는 다음과 같다 :

  1. 브라우저에서 응용 프로그램을 시작.
  2. j_security_check 작업으로 로그인 양식 페이지로 리디렉션하십시오.
  3. 응용 프로그램 로그인 및 사용.
  4. 브라우저에서 '뒤로'버튼을 누릅니다.
  5. 로그인 양식 페이지로 다시 돌아갑니다.
  6. 다시 로그인하십시오.
  7. 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) 

플렉스/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' 

첫 번째는 동안 블레이즈 DS는 두 번째 세션을 얻을 것으로 보인다 여전히 유효하고 활동적입니다.

아는 사람, 정확히이 문제가 발생하고 어떻게 우아하게 해결할 수 있습니까? 나는 몇 가지 팁을 가지고 있지만 그들은 충분히 적합 알고하지 않습니다 플렉스/ActionScript에서 오류가 세션을 무효화하기 위해 로그 아웃 페이지로 리디렉션

  • 캐치 후 로그인 페이지로 리디렉션하고 새로운 세션을 생성합니다.
  • 자바 스크립트로 브라우저의 "뒤로"버튼을 비활성화하십시오.

나는 어떤 제안, 설명 및 조언을 주셔서 감사합니다. 감사.

답변

1

문제는 세션 고정입니다.

는 무엇 일 :

  • 당신은
  • 당신은
  • 당신은 FlexSession를 얻을 수 (세션 속성으로 설정)
  • 당신이 버튼을 당신은 로그인
  • 을 다시 클릭 세션을 얻을 로그인합니다 (전달 예전의 jsessionid)

봄의 SessionFixationProt ectionStrategy :

  • 은 JSESSIONID에 대한 세션이
  • 추출 된 세션의 속성
  • 무효화 세션 (그것을 파괴)
  • 만든 새 세션
  • 전송 된 세션의 속성 새로운 세션
  • 에 유효 감지

이전 세션이 삭제되면 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

희망이

하는 데 도움이
+0

이 팁을 가져 주셔서 감사합니다. 지금 당장은 그 프로젝트를 진행하고 있지 않지만, 나중에 돌아와서 결과를 모두 알게 될 때 다시 확인해 볼 것입니다. – Sharg

관련 문제