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

Java 匿名用户的Tomcat/spring会话管理,java,spring,session,tomcat,spring-security,Java,Spring,Session,Tomcat,Spring Security,我有下一个用例: 我们有网上商店,用户可以选择一些商品然后购买。他可以在登录应用程序之前将商品添加到购物车中。所有这些项目都必须存储在他的会话中。当用户点击“支付”按钮时,我们将询问他的凭证/卡等 我的问题:当我在将物品添加到购物车之前登录时,所有操作都正常。但当我尝试以匿名用户的身份将项目添加到购物车时,项目并没有存储。作为匿名用户刷新每个页面后,我总是收到不同的JSESSIONID 我决定创建一个简单的应用程序来说明我的问题。我想没有我的消息来源是无法修复的 这是我的申请表: 这很简单。它

我有下一个用例:

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

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

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

这是我的申请表:

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

要运行它,您需要gradle、tomcat和define环境设备变量CATALINA_HOME, 比您可以使用:

梯度展开


p、 对不起,我的英语不好

org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy启用调试日志级别

登录时必须有日志语句:

>Invalidating session with Id '<originalSessionId>' <and : without> migrating attributes
>正在使Id为“”的会话无效迁移属性

如果打印“不迁移属性”,则需要将spring securitys
SessionFixationProtectionStrategy.migrateSessionAttributes
配置为
true
(但这应该是默认设置)

另一个问题可能是,当您从http切换到https时,tomcat会更改会话。
要验证这是否是问题所在:首先切换到https(而不是loggedin)并将项目发送到购物车,然后检查它们是否消失。但是tomcat通常应该在从http切换到https时保留会话内容(但不是相反)。

对不起,伙计们,这是环境问题。
我刚刚清理了本地主机的所有Cookie,现在一切正常。

我使用http协议,没有从http切换到https。您找到日志语句了吗?刷新页面时未调用SessionFixationProtectionStrategy。添加一些日志。。。27341[http-bio-8080-exec-9]调试org.springframework.security.web.session.SessionManagementFilter-请求的会话ID F792906E3E8DBBE41F099F1C1A037BED无效。