2017-09-11 77 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

显然,删除此小脚本解决了我的问题。现在,我只是想知道为什么有人这样做,我在这个过程中打破了什么:)