7

我有下一个用例:

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

我的问题:当我在将商品添加到购物车之前登录时,一切正常。但是,当我尝试以匿名用户身份将商品添加到购物车时,商品并未存储。以匿名用户身份刷新每个页面后,我总是收到不同的 JSESSIONID。

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

这是我的应用程序:

https://github.com/AlexTestAccount/simple_test

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

要运行它,您需要 gradle、tomcat 并定义环境变量 CATALINA_HOME,而不是您可以使用:

梯度部署

ps对不起我的英语

4

2 回答 2

1

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

登录时必须有log语句:

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

如果它打印“没有迁移属性”,那么您需要将弹簧安全配置SessionFixationProtectionStrategy.migrateSessionAttributestrue(但这应该是默认设置)

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

于 2013-04-11T14:50:39.407 回答
0

对不起,是环境问题。我只是清理了本地主机的所有 cookie,现在一切正常。

于 2013-04-12T09:17:32.447 回答