Spring Security:在覆盖会话之前显示警告

时间:2016-12-22 03:52:02

标签: java spring security session spring-security

我已将最大并发会话数设置为1。 现在有2 situations如果有活动会话我想要处理(有人已经登录该用户ID):

  1. 如果用户在同一浏览器上再次访问登录页面: 在这种情况下,他将直接登录。

  2. 如果用户从其他浏览器/客户端计算机登录:在这种情况下,需要显示错误"该会话已经为该用户激活。您确定要覆盖会话吗?"。如果用户选择“是”,则错误将显示在上一个会话中(我知道错误页面可以配置),如果他选择“否”,则不会登录,前一个会话将保持不变。

  3. 如何使用弹簧安全性实现这些用例?到目前为止,我已经能够通过设置最大会话数和错误页来找到并发会话的基本管理。

    请帮忙。

    感谢。

1 个答案:

答案 0 :(得分:1)

我认为你差不多完成了它。要在覆盖会话之前询问用户,请按照以下步骤操作。

  1. ConcurrentSessionFilter的expiredUrl属性应该到达提供UI以询问用户的页面(例如askUser.html)。
  2. askUser.html表单提交另一个url(例如/ api / confirmSessionRewrite),POST参数为yes或no。
  3. 在控制器ConfirmSessionRewrite中,从会话注册表中删除用户或将其转发到登录页面。

    sessionRegistry.removeSessionInformation(info.getSessionId());

  4. 您必须修改配置,以便ConcurrentSessionFilter不会在/ api / confirmSessionRewrite请求上运行。否则它将是一个循环。