匿名用户的Tomcat / spring会话管理

时间:2013-04-11 14:35:53

标签: java spring session tomcat spring-security

我有下一个用例:

我们有网店,用户可以选择一些商品然后购买。在登录应用程序之前,他可以将商品添加到购物车中。所有这些项目必须存储在他的会话中。当用户点击“付款”按钮时,我们会询问他的凭证/卡/等。

我的问题:当我在登录之前将项目添加到购物车时,所有工作正常。但是当我尝试将项目作为匿名用户添加到购物车时,项目不会存储。在将每个页面刷新为匿名用户后,我总是收到不同的JSESSIONID。

我决定创建简单的应用程序来说明我的问题。我想如果没有我的消息来源就无法修复。

这是我的申请:

https://github.com/AlexTestAccount/simple_test

非常简单。它只包含一个控制器和会话bean,我尝试保存一些东西。

要运行它,你需要gradle,tomcat和define enviropment变量CATALINA_HOME, 你可以使用:

gradle deploy

P.S。对不起我的英文

2 个答案:

答案 0 :(得分:1)

启用org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy

的调试日志级别

登录时必须有一条日志声明:

>Invalidating session with Id '<originalSessionId>' <and : without> migrating attributes

如果打印“没有迁移属性”,则需要将弹簧安全性SessionFixationProtectionStrategy.migrateSessionAttributes配置为true(但这应该是默认值)

另一个问题可能是,当您从http切换到https时,tomcat会更改会话。 要验证这是问题:首先切换到https(未登录)和项目到您的购物车,然后检查它们是否消失。但是,当从http切换到https时,tomcat应该正常保留会话内容(但不是相反)。

答案 1 :(得分:0)

对不起,伙计们,这是环境问题。 我只是为localhost清理了所有的cookie,现在一切正常。