2017-09-11 78 views
0

TLDR:Spring重定向到登錄頁面時正在銷燬當前的HTTP會話;這破壞了登錄後導航到DefaultSavedRequest的能力。這是爲什麼發生?Spring Security - SavedRequestAwareAuthenticationSuccessHandler是否損壞?

詳情 - 我保持了傳統的Spring應用程序:

  • 彈簧芯版本3.1.0
  • 的Spring Security版本3.1.0

當試圖利用SavedRequestAwareAuthenticationSuccessHandler在我登錄配置,它不工作。這裏是什麼似乎是發生了什麼:

  • HTTP GET擔保資源:http://localhost:8080/myapp/viewWorkOrder?workOrderNumber=315261
  • 春季正確決定,我沒有記錄並保存我的要求:

    DEBUG o.s.s.w.s.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/myapp/viewWorkOrder?workOrderNumber=315261] 
    
  • 春季正確重定向到我的登錄頁面:

    DEBUG o.s.security.web.FilterChainProxy - /login.jsp at position 1 of 9 in additional filter chain; firing Filter: 'ChannelProcessingFilter' 
    
  • Spring de stroys這有效地破壞以後使用DefaultSavedRequest的能力在當前會話:

    DEBUG o.s.s.w.s.HttpSessionEventPublisher - Publishing event: org.springframework.security.web.session.HttpSessionDestroyedEvent[[email protected]] 
    

爲什麼或者是什麼原因造成當前會話被破壞?

以下是相關配置細節:

<bean id="savedRequestAwareAuthenticationSuccessHandler" 
    class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
    <property name="defaultTargetUrl" value="/postLogin" /> 
    <property name="targetUrlParameter" value="targetUrl" /> 
    <property name="alwaysUseDefaultTargetUrl" value="false" /> 
</bean> 

<security:http auto-config="false"> 
    <!-- Override default login and logout pages --> 
    <security:form-login login-page="/login.jsp" 
         login-processing-url="/j_spring_security_check" 
         authentication-failure-url="/login.jsp?login_error=1" 
         authentication-success-handler-ref="savedRequestAwareAuthenticationSuccessHandler" 
         /> 

    <security:session-management session-fixation-protection="none"/> 
  • 注意的session-management列入似乎並不影響功能兩種方式。
+1

當你確切地看到,你的會議正在被破壞?重新定向後?或者在您輸入您的憑證並嘗試登錄後? – Leffchik

+0

@Leffchik,重定向後。當我嘗試隔離相對於重定向控制器發生的情況時,我會在其中添加一條評論。 – kansasSamurai

回答

0

嗯,這是令人尷尬的,但爲了成爲堆棧溢出的好公民,我想我會分享我發現的東西。

在Spring HttpSessionEventPublisher中設置了一個斷點後,看看堆棧是否可以給我一個線索,它當然可以。以下是屏幕截圖: enter image description here

您會注意到login.jsp在堆棧中。作爲新來這個特定的應用,我真的沒有甚至懷疑了JSP,但這裏是我發現:

enter image description here

顯然,刪除此小腳本解決了我的問題。現在,我只是想知道爲什麼有人這樣做,我在這個過程中打破了什麼:)