Java Spring安全更改会话ID

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不同 首先调

我使用的是spring security 3.1.4,存在以下问题: 我实现了我的自定义
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?