SessionFixationProtectionStrategy导致会话失效

时间:2013-12-26 14:01:24

标签: grails spring-security grails-2.0

  • Grails 2.3.2
  • Spring Security 2.0RC

自从迁移到2.3.x以及新版本的spring安全插件以来,我们的Grails应用程序中开始出现大量“会话已经失效”的异常。
问题似乎与SessionFixationProtectionStrategy中的逻辑有关。当用户向服务器发送2个同时请求时(在2个浏览器选项卡中):

  • “1” -login
  • “2” - 查看自定义页面

,发生以下情况:

  1. 两个请求都使用相同的SID - > “A”。
  2. 登录请求 - 成功验证后“1”使会话A无效并创建会话B.个人页面将显示给登录用户。
  3. 自定义页面请求 - “2”尝试在页面呈现期间访问会话A并遇到会话无效的异常。使用SID为此请求创建新会话 - > “C”,浏览器cookie被覆盖。
  4. 两个打开的标签都将使用SID - > “C”,对于进一步的请求,因此将被要求再次登录。
  5. A1  A2
    |   | 
    B1  A2 - crashes
    |   |   
    B1  |
    |   C2 - recreated for the user
    |
    C2
    

    上述行为似乎不正确,因此我的问题是如何正确处理。

1 个答案:

答案 0 :(得分:0)

您可以关闭会话固定保护。

在java中:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
 @Override
    protected void configure(HttpSecurity http) throws Exception {
        ...
        http.sessionManagement().sessionFixation().none();
    }
...
}

在XML(Spring-Security.xml)中:

<http>      
    <session-management session-fixation-protection="none"/>
</http>