java - 匿名用户的 Tomcat/spring session 管理

标签 java spring session tomcat spring-security

我有下一个用例:

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

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

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

这是我的申请:

https://github.com/AlexTestAccount/simple_test

很简单。它只包含一个 Controller 和 session bean,我尝试在其中保存一些东西。

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

渐变部署

附注对不起我的英语

最佳答案

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

登录时必须有一条log语句:

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

如果它打印“without migrating attributes”,那么您需要将 spring security SessionFixationProtectionStrategy.migrateSessionAttributes 配置为 true(但这应该是默认值)

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

关于java - 匿名用户的 Tomcat/spring session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951594/

相关文章:

php - 尝试设置全局 "$ADMIN"变量以允许或拒绝访问我的网站的管理区域

java - 如何从 jython 的 url 中删除 .py

java - SSLHandshakeException : No subject alternative names present

java - hibernate validator 不适用于 Spring MVC 应用程序

asp.net-mvc - 何时在 ASP.Net MVC 中使用 TempData 与 Session

java - 如何在 Google 应用引擎上使用 Session

java - while 循环之外的 ArrayList 未更新

java - 如何创建 List<WebElement> 并单击引发 java.lang.IndexOutOfBoundsException 的选项

java - Spring validator 自定义 HTTP 状态

java - 使用 Spring Security Autowiring 依赖注入(inject)