Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Security 3.0重定向到超时页面_Java_Spring_Security_Redirect - Fatal编程技术网

Java Spring Security 3.0重定向到超时页面

Java Spring Security 3.0重定向到超时页面,java,spring,security,redirect,Java,Spring,Security,Redirect,我使用的是Spring Security 3.0.6,我希望能够做到以下几点: 如果用户在某个页面上,并且发生会话超时,则会将该用户带到登录页面,并在有效登录时重定向回发生超时的页面 我当前在security.xml文件中有以下内容 <http auto-config="true" use-expressions="true"> <form-login login-page="/login" default-target-url="/m

我使用的是Spring Security 3.0.6,我希望能够做到以下几点:

如果用户在某个页面上,并且发生会话超时,则会将该用户带到登录页面,并在有效登录时重定向回发生超时的页面

我当前在security.xml文件中有以下内容

<http auto-config="true" use-expressions="true">
    <form-login
        login-page="/login" 
        default-target-url="/main" 
        always-use-default-target="false"
        authentication-failure-url="/login.html?error=true"
        authentication-success-handler-ref="authenticationSuccessHandler" />
    <remember-me/>
    <logout logout-success-url="/login" />
</http>
}

我通过javascript将用户发送回登录页面,如下所示:

window.location.href="/login";

在我的身份验证类中,url始终为空。如何使Spring重定向到正确的页面?

您不需要编写任何自定义代码,因为Spring Security在默认情况下可以做到这一点。查看有关
身份验证成功处理程序ref
的文档

身份验证成功处理程序ref

这可以作为默认目标url的替代,并始终使用默认目标,使您能够在成功身份验证后完全控制导航流。该值应该是应用程序上下文中AuthenticationSuccessHandler bean的名称默认情况下,使用的实现并注入默认目标url

对AuthenticationSuccessHandler bean的引用,该bean应用于处理成功的身份验证请求不应与默认目标url结合使用(或始终使用默认目标)因为实现应始终处理到后续目标的导航


从您对上一个答案的评论中,我看到了两个选项

  • 创建定制的RequestCache,例如,通过扩展HttpSessionRequestCache并避免将ajax请求放在该缓存上,您在登录时应该重定向到最后一个无ajax请求

  • 实现您自己的重定向策略,以发送自定义ajax响应,该响应将由您的客户端代码进行解释。在某些情况下,设置自定义重定向策略并不容易,因为不同元素没有配置属性,例如,在SessionManagementFilter的情况下,您需要创建自己的实例并设置自定义重定向策略


  • 我希望这会有所帮助

    谢谢您的回复。默认情况下,spring是如何处理的?如果用户第一次进入登录页面,我需要将他们引导到/main。如果他们从另一页超时,我需要他们转到另一页。如何使用SavedRequestStataWareAuthenticationSuccessHandler实现这一点?一个代码示例会很有帮助。如果不定义
    身份验证成功处理程序ref
    ,ThanksIt是Spring的常见行为。从你的配置中删除它。我想我误解了什么。我删除了authentication-success-handler-ref。spring如何知道哪个页面导致超时?我想在登录屏幕后被重定向回该页面。我试过了,登录后会一直显示正常的默认屏幕。超时不是由页面引起的,而是由用户不活动引起的。如果会话已过期,并且用户请求任何需要验证的页面,则将显示登录表单。登录后,用户将被带到会话到期后请求的页面,而不是超时发生时的页面。好的,我现在明白了。谢谢你的解释。我想我的问题是我没有要求另一页。我正在做一个ajax调用来更新同一页面上的内容。我可以在控制器中添加一些东西吗?
    window.location.href="/login";