问题描述
我有一个同时使用Spring Security和Spring Session的应用程序。我正在将应用程序转换为使用XML jdbc配置将其Spring Sessions存储在MysqL中,并且由于会话记录显示在MysqL表中,因此似乎可以正常工作。
由于其他原因,我将内部创建的会话对象与spring会话对象结合使用,并尝试使用spring session ID链接两个会话。这是我遇到的基本问题:
首先,我进行身份验证,然后创建一个spring会话。 这给了我Spring Session ID A,我将其存储在内部会话表中以链接到spring session。 其他过滤器被命中,请求进入REST控制器。 在REST控制器中,我尝试访问spring会话,并且看到有效的ID和spring会话,但是使用Spring Session ID B,因此spring会话和内部会话之间的连接断开。
我是否有理由在会话中拥有2个独立的经过身份验证的春季会议,并且具有相同的主要信息?
一个单独但相关的问题,如果我尝试通过RequestContextHolder访问spring会话ID,它将以标准的全大写十六进制代码格式(例如3AD475F78823D7CDC5C4571D50B0AB35)给出一个ID,而如果我通过SecurityContextHolder访问它,则该ID位于格式不同(例如c2215820-bd08-4c78-b26e-0821913333a1),是否有特定原因?
谢谢。
解决方法
为了防止会话固定,默认情况下,Spring Security在身份验证后为您提供一个新的会话,请参阅https://www.baeldung.com/spring-security-session#session-fixation
请告诉我这是否有用。
-Kaj:)