有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有下一个用例:

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

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

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

这是我的申请表:

https://github.com/AlexTestAccount/simple_test

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

要运行它,您需要gradle、tomcat和define Environment变量CATALINA_HOME, 比你可以使用:

格雷德尔部署

另外,我的英语很抱歉


共 (2) 个答案

  1. # 1 楼答案

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

    登录时必须有日志语句:

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

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

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

  2. # 2 楼答案

    抱歉,伙计们,这是环境问题。 我刚刚为localhost清理了所有cookie,现在一切正常了