在我的应用程序中,我有一个嵌入式码头服务器(版本 8.1.2),它运行一个使用 Spring Web 安全性的 Web 应用程序。码头服务器配置为使用JDBCSessionManager
spring 使用的安全过滤器之一是 的子类AbstractAuthenticationProcessingFilter
,在其中,它具有 a SessionAuthenticationStrategy
,默认情况下是 a SessionFixationProtectionStrategy
。此保护策略创建一个新会话,作为原始会话的副本,并使旧会话无效。
现在,当我尝试登录 Web 应用程序时,我看到创建了一个新会话,但添加到新会话的身份验证属性没有写回数据库。此外,我看到旧会话被写入具有新属性的数据库,即使它已失效。
最后,当一个新的 http 请求作为新会话的一部分到达时,由于上述原因,它没有通过身份验证。
经过一番调查,我发现在旧版本的jetty(我尝试了7.1.4)中不会发生这种行为,并且我看到新的会话数据已写入数据库。
我当然可以通过以下任何方式解决这个问题:
- 使用旧版本的码头
- 禁用会话固定保护策略
- 使用默认会话管理器而不是
JDBCSessionManager
但假设上述选项都对我无效,我想知道是否有任何解决方案可以解决这个问题。
谢谢!