Java Spring安全更改会话ID
我使用的是spring security 3.1.4,存在以下问题: 我实现了我的自定义Java Spring安全更改会话ID,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我使用的是spring security 3.1.4,存在以下问题: 我实现了我的自定义SavedRequestAwareAuthenticationSuccessHandler,并实现了一个缓存SessionRegistry。 问题在于,我在SessionRegistry.registerNewSession中获取的会话id与我在SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess中获取的会话id不同 首先调
SavedRequestAwareAuthenticationSuccessHandler
,并实现了一个缓存SessionRegistry
。
问题在于,我在SessionRegistry.registerNewSession
中获取的会话id与我在SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess中获取的会话id不同
首先调用会话注册表。
正确的是什么?我怎样才能在这两个方面都做到相同
自定义SessionRegistry.registerNewSession是否有办法获取spring安全会话id?只是猜测而已。但这听起来像是以下问题
在SpringSecurity中,默认情况下会启用一个称为会话固定保护的功能。
出于安全原因,它将会话迁移到新ID。
假设有人通过电子邮件向您提供一个带有现有会话ID的url,您单击链接并登录。
现在,可以向您提供url的人只需使用提供的会话id就可以入侵您的帐户
如果您想禁用它,可以通过在spring安全配置中放置以下行来实现。但是,请注意风险
<http .. >
...
<session-management session-fixation-protection="none">
...
</http>
...
...
只是猜测而已。但这听起来像是以下问题
在SpringSecurity中,默认情况下会启用一个称为会话固定保护的功能。
出于安全原因,它将会话迁移到新ID。
假设有人通过电子邮件向您提供一个带有现有会话ID的url,您单击链接并登录。
现在,可以向您提供url的人只需使用提供的会话id就可以入侵您的帐户
如果您想禁用它,可以通过在spring安全配置中放置以下行来实现。但是,请注意风险
<http .. >
...
<session-management session-fixation-protection="none">
...
</http>
...
...
我解决问题的方法是通过以下步骤:
为SessionFixationProtectionStrategy
将#1中的新bean作为属性添加到AuthenticationFilter
bean中
...
...
在
标记中添加了具有会话固定保护
属性的会话管理配置
...
根据Spring Security doco,SessionFixationProtectionStrategy
被用作3.1之前的Java EE Servlet API实现的SessionAuthenticationStrategy
,而从Servlet API 3.1开始,应该使用ChangeSessionDauthenticationStrategy
。我通过以下步骤解决了这个问题:
为SessionFixationProtectionStrategy
将#1中的新bean作为属性添加到AuthenticationFilter
bean中
...
...
在
标记中添加了具有会话固定保护
属性的会话管理配置
...
根据Spring安全文档,SessionFixationProtectionStrategy
用作3.1之前的Java EE Servlet API实现的SessionAuthenticationStrategy
,而从Servlet API 3.1开始,应该使用ChangeSessionDauthenticationStrategy
。是否有一种方法可以让自定义SessionRegistry.registerNewSession获取spring安全会话id?除了我上面解释的以外。但是你想达到什么目的呢?会话注册表的工作是持久化会话,successhandler的工作是在登录后执行某些操作。为什么您需要相同的会话ID?有没有一种方法可以让custom SessionRegistry.registerNewSession获取spring安全会话ID?除了我上面解释的以外。但是你想达到什么目的呢?会话注册表的工作是持久化会话,successhandler的工作是在登录后执行某些操作。为什么您需要相同的会话ID?