【问题标题】:Spring session returning different session IDs during and after authenticationSpring会话在身份验证期间和之后返回不同的会话ID
【发布时间】:2020-08-25 17:32:50
【问题描述】:

我有一个同时使用 Spring Security 和 Spring Session 的应用程序。我正在转换我的应用程序以使用 XML jdbc 配置将其 Spring Sessions 存储在 MySQL 中,这似乎正在工作,因为会话记录出现在 MySQL 表中。

出于其他原因,我将内部创建的会话对象与弹簧会话对象结合使用,并尝试使用弹簧会话 ID 来链接两个会话。这是我遇到的基本问题:

首先我进行身份验证,然后创建一个 spring 会话。 这给了我 Spring Session ID A,我将它存储在我的内部会话表中以链接到 spring 会话。 其他过滤器被命中,请求进入 REST 控制器。 在 REST 控制器中,我尝试访问 spring 会话,我看到了一个有效的 ID 和 spring 会话,但是 Spring Session ID 为 B,因此 spring 会话和我的内部会话之间的连接被破坏了。

是否有理由让我在会话中使用相同的主体信息进行 2 个单独的经过身份验证的 Spring 会话?

单独但相关的问题,如果我尝试通过 RequestContextHolder 访问 Spring 会话 ID,它会提供标准全大写十六进制代码格式的 ID(例如 3AD475F78823D7CDC5C4571D50B0AB35),而如果我通过 SecurityContextHolder 访问它,则 ID 在不同的格式(例如 c2215820-bd08-4c78-b26e-0821913333a1),是否有特殊原因?

谢谢。

【问题讨论】:

    标签: java spring spring-security spring-session


    【解决方案1】:

    为了防止会话固定,Spring Security 默认情况下会在身份验证后为您提供一个新会话,请参阅https://www.baeldung.com/spring-security-session#session-fixation

    如果有用请告诉我。

    -Kaj :)

    【讨论】:

    • 有趣,我会检查日志,如果是这样的话,听起来它应该在某处有一个会话被破坏的消息。我会四处寻找并更新,谢谢!
    • @JoeD 好!请让我知道这对你有什么影响:)
    • 目前没有发现任何会话被破坏的消息/事件。正如我上面提到的,为什么春季会话 ID 之间的格式存在差异仍然感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 2013-04-03
    • 2016-11-10
    • 2016-03-05
    • 2019-01-28
    • 2016-01-05
    • 2020-10-06
    • 2017-06-16
    相关资源
    最近更新 更多