配置spring security以在会话超时后将用户重定向到以前的位置

时间:2013-05-29 09:19:13

标签: spring-security session-timeout

我的弹簧安全配置和我使用的InvalidSessionStrategy实现有一点问题。

假设用户已连接到该应用并且正在查看页面:/userArea/thePage并且他们的会话超时,则用户将首先重定向到 { {1}}页面。然后,一旦成功登录,他们将重定向到他们个人区域的主页/signin,而我希望他们回到会话时所在的位置超时/userArea

这可能吗?

如果是这样,我如何更改配置/应用程序?

这是我当前的配置:

/userArea/thePage

编辑1 :让我更好地说明我的要求:

  • 当用户会话超时时,我希望将用户重定向到已保存的请求(他们在重定向到登录页面之前请求的网址)。
  • 但是,当他们最初使用应用程序登录时,我希望将它们重定向到个人区域的主页。

我的要求是否可以使用Carsten建议的解决方案(见下文)实施?

1 个答案:

答案 0 :(得分:1)

您可以在always-use-default-target="true"标记中设置form-login。这会将用户重定向到他们尝试访问的URL,然后才会被截获登录。

但这将是标准行为,而不仅仅是会话超时的情况。根据应用程序的不同,这可能不是您想要的。

修改 要执行您想要的操作,您需要找到一种方法来保存用户在会话超时时间所在页面上的信息。我不知道这个问题的任何开箱即用的解决方案,因为没有状态指示用户是否超时或手动注销。

需要做的是:

  1. 设置标志或将页面网址保存在会话超时
  2. 签入自定义AuthenticationSuccesHandler并根据
  3. 重定向

    如果我像我那样实现某些东西,我很可能会存储page-url。从UX的角度来看,还有一些棘手的事情。如果保存的页面依赖于之前实现的状态,会发生什么? (我假设你希望用户在正常登录时转到default-url的原因是什么?)如果用户没有注销,会在晚上关闭睡眠并登录导航到登录页面会发生什么? / page-url超时?)?等

    一般来说,我认为最好使用always-use-default-target="true",因为这样可以为任何页面添加书签,而不必在每次登录时都进行导航。