Spring security 带有JDBCSessionManager和SpringWeb安全性的Jetty
在我的应用程序中,我有一个嵌入式jetty服务器(版本8.1.2),运行一个使用SpringWebSecurity的web应用程序。 jetty服务器配置为使用Spring security 带有JDBCSessionManager和SpringWeb安全性的Jetty,spring-security,jetty,httpsession,Spring Security,Jetty,Httpsession,在我的应用程序中,我有一个嵌入式jetty服务器(版本8.1.2),运行一个使用SpringWebSecurity的web应用程序。 jetty服务器配置为使用JDBCSessionManager spring使用的安全过滤器之一是AbstractAuthenticationProcessingFilter的子类,其中有一个SessionAuthenticationStrategy,默认情况下是一个SessionFixationProtectionStrategy。此保护策略将创建一个新会话,作
JDBCSessionManager
spring使用的安全过滤器之一是AbstractAuthenticationProcessingFilter
的子类,其中有一个SessionAuthenticationStrategy
,默认情况下是一个SessionFixationProtectionStrategy
。此保护策略将创建一个新会话,作为原始会话的副本,并使旧会话无效
现在,当我尝试登录到web应用程序时,我看到创建了一个新会话,但是添加到新会话的身份验证属性不会写回数据库。此外,我看到旧会话被写入数据库,并带有新属性,即使它已失效
最后,当新http请求作为新会话的一部分到达时,由于上述原因,它不会通过身份验证
经过一些调查,我发现这种行为在jetty的旧版本中没有发生(我尝试了7.1.4),并且我看到新的会话数据被写入数据库
我当然可以通过以下任何一种方法来解决这个问题:
- 使用旧版本的jetty
- 禁用会话固定保护策略
- 使用默认的会话管理器,而不是
JDBCSessionManager
谢谢 在jetty 8的较新版本中得到解决,至少8.1.6:)在RT/jetty下的bugs.eclipse.org中写下问题的清晰描述,我们会解决它,但问题是什么还不清楚……您也可以尝试8.1.6(或8.1.7,不久将在central中发布),看看它是否仍然是一个问题,我们最近修复了一些会话错误谢谢。。。事实证明,该行为是
SessionHandler#doScope
的finally
子句的一部分,正如您所建议的,该行为在8.1.6中确实得到了修复(可能更早,这是我检查的)