我有下一个用例:
我们有网店,用户可以选择一些商品然后购买。在登录应用程序之前,他可以将商品添加到购物车中。所有这些项目必须存储在他的会话中。当用户点击“付款”按钮时,我们会询问他的凭证/卡/等。
我的问题:当我在登录之前将项目添加到购物车时,所有工作正常。但是当我尝试将项目作为匿名用户添加到购物车时,项目不会存储。在将每个页面刷新为匿名用户后,我总是收到不同的JSESSIONID。
我决定创建简单的应用程序来说明我的问题。我想如果没有我的消息来源就无法修复。
这是我的申请:
https://github.com/AlexTestAccount/simple_test
非常简单。它只包含一个控制器和会话bean,我尝试保存一些东西。
要运行它,你需要gradle,tomcat和define enviropment变量CATALINA_HOME, 你可以使用:
gradle deploy
P.S。对不起我的英文
答案 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,现在一切正常。