SessionFixationProtectionStrategy导致的会话无效 Grails2.3.2 Spring Security 2.0RC

SessionFixationProtectionStrategy导致的会话无效 Grails2.3.2 Spring Security 2.0RC,grails,spring-security,grails-2.0,Grails,Spring Security,Grails 2.0,自从迁移到2.3.x和新版本的SpringSecurity插件以来,我们的Grails应用程序中出现了大量已经失效的会话异常。 这个问题似乎和SessionFixationProtectionStrategy中的逻辑有关。当用户在两个浏览器选项卡中向服务器同时发送两个请求时: 1-登录 2视图自定义页面 ,发生以下情况: 两个请求使用相同的SID->A。 登录请求-1在成功身份验证后使会话A无效并创建会话B。将向登录的用户显示个人页面。 自定义页面请求-2在页面呈现期间尝试访问会话A,并遇到会话

自从迁移到2.3.x和新版本的SpringSecurity插件以来,我们的Grails应用程序中出现了大量已经失效的会话异常。 这个问题似乎和SessionFixationProtectionStrategy中的逻辑有关。当用户在两个浏览器选项卡中向服务器同时发送两个请求时:

1-登录 2视图自定义页面 ,发生以下情况:

两个请求使用相同的SID->A。 登录请求-1在成功身份验证后使会话A无效并创建会话B。将向登录的用户显示个人页面。 自定义页面请求-2在页面呈现期间尝试访问会话A,并遇到会话无效异常。将使用SID->C为此请求创建一个新会话,并覆盖浏览器cookie。 两个打开的选项卡将使用SID->C进行进一步请求,因此将要求再次登录。
上述行为似乎不正确,因此我的问题是如何正确处理此问题。

您可以关闭会话固定保护

在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>

不幸的是,这对我来说似乎是一种正确的行为。。。如果这有一个解决方案就好了+1实际再次阅读问题时,步骤C3不应创建新会话!它应该将用户重定向到登录页面。。。该请求要么使用新的会话id,要么也不应该创建新会话。感谢Pavel,刚刚发现重定向到错误页面在A2崩溃步骤之后。此时我们的grails过滤器被触发,它们正在访问会话对象。根据grails行为,如果不存在新会话,它将始终创建新会话。因此,解决方案是从过滤器中排除错误页面/操作。同时尝试此解决方案。。。
<http>      
    <session-management session-fixation-protection="none"/>
</http>