【问题标题】:Tomcat/spring session management for anonymous user匿名用户的 Tomcat/spring 会话管理
【发布时间】:2013-04-03 19:32:17
【问题描述】:

我有下一个用例:

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

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

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

这是我的申请:

https://github.com/AlexTestAccount/simple_test

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

要运行它,您需要 gradle、tomcat 并定义环境变量 CATALINA_HOME, 超出你的使用范围:

gradle 部署

附言对不起我的英语

【问题讨论】:

    标签: java spring session tomcat spring-security


    【解决方案1】:

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

    登录时必须有log语句:

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

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

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 2017-05-21
      • 1970-01-01
      • 2013-03-10
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2018-12-27
      相关资源
      最近更新 更多