【发布时间】: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