Spring session在身份验证期间和之后返回不同的会话ID

eanckbw9  于 2023-10-15  发布在  Spring
关注(0)|答案(2)|浏览(108)

我有一个同时使用Spring Security和Spring Session的应用程序。我正在使用XML jdbc配置将我的应用程序转换为将其Spring Sessions存储在MySQL中,并且这似乎正在工作,因为会话记录出现在MySQL表中。
出于其他原因,我使用了一个内部创建的session对象和spring session对象,并尝试使用spring session ID链接两个session。这是我遇到的基本问题:
首先我进行身份验证,然后创建一个Spring会话。这给了我SpringSessionIDA,我将它存储在我的内部会话表中以链接到spring会话。其他过滤器被命中,请求进入REST控制器。在REST控制器中,我尝试访问spring会话,我看到了一个有效的ID和spring会话,但是Spring会话ID为B,因此spring会话和我的内部会话之间的连接断开了。
有什么理由让我有两个单独的经过身份验证的spring会话,在会话中具有相同的主要信息吗?
单独但相关的问题,如果我试图通过RequestContextHolder访问Spring会话ID,它会以标准的全大写十六进制代码格式(例如,3AD 475 F78823 D 7 CDC 5C 4571 D50 B 0AB 35),而如果我通过SecurityContextHolder访问它,则ID的格式不同(例如,c2215820-bd 08 - 4c 78-b26 e-0821913333 a1),这有什么特殊原因吗?
谢谢.

uinbv5nw

uinbv5nw1#

要防止会话固定,Spring Security默认情况下会在身份验证后为您提供一个新会话,请参阅https://www.baeldung.com/spring-security-session#session-fixation
请让我知道这是否有用。
-Kaj:)

suzh9iv8

suzh9iv82#

查看DefaultCookieSerializer.setDataBase64Encoding()。默认情况下,cookie上设置的值是base64编码的。您可以对3AD475F78823D7CDC5C4571D50B0AB35进行base64解码,并获得会话ID的值

相关问题