2

在我的应用程序中,我有一个嵌入式码头服务器(版本 8.1.2),它运行一个使用 Spring Web 安全性的 Web 应用程序。码头服务器配置为使用JDBCSessionManager

spring 使用的安全过滤器之一是 的子类AbstractAuthenticationProcessingFilter,在其中,它具有 a SessionAuthenticationStrategy,默认情况下是 a SessionFixationProtectionStrategy。此保护策略创建一个新会话,作为原始会话的副本,并使旧会话无效。

现在,当我尝试登录 Web 应用程序时,我看到创建了一个新会话,但添加到新会话的身份验证属性没有写回数据库。此外,我看到旧会话被写入具有新属性的数据库,即使它已失效。

最后,当一个新的 http 请求作为新会话的一部分到达时,由于上述原因,它没有通过身份验证。

经过一番调查,我发现在旧版本的jetty(我尝试了7.1.4)中不会发生这种行为,并且我看到新的会话数据已写入数据库。

我当然可以通过以下任何方式解决这个问题:

  • 使用旧版本的码头
  • 禁用会话固定保护策略
  • 使用默认会话管理器而不是JDBCSessionManager

但假设上述选项都对我无效,我想知道是否有任何解决方案可以解决这个问题。

谢谢!

4

1 回答 1

1

已在 jetty 8 的较新版本中解决,至少 8.1.6 :)

于 2012-09-11T19:50:55.770 回答