【问题标题】:Session timeout in Java (with Spring Boot and Hazelcast)Java 中的会话超时(使用 Spring Boot 和 Hazelcast)
【发布时间】:2019-08-08 23:05:07
【问题描述】:

我有一个使用 Spring Boot 1.5.13 构建的 java 应用程序,但我无法将会话超时设置为 60 分钟。 我发现 Spring 将默认会话超时设置为 30 分钟。在这个项目中,我们使用:

  • HttpSecurity 的自定义配置

    受保护的无效配置(HttpSecurity http){

    http.successHandler((httpServletRequest, httpServletResponse, authentication) -> {

    httpServletResponse.setHeader(AUTHENTICATED_HEADER_NAME, AUTHENTICATED_TRUE);

    HttpSession 会话 = httpServletRequest.getSession(); session.setMaxInactiveInterval(3600); }) }

  • 和 Hazelcast,带有注释

@EnableHazelcastHttpSession(hazelcastFlushMode = HazelcastFlushMode.IMMEDIATE, maxInactiveIntervalInSeconds = 3600)

关于配置类。

到目前为止,上面的方法都不起作用,但我发现我可以在 application.properties 文件中使用server.session.timeout=timeInSeconds,但它没有效果。在调试模式下,我可以看到session.maxInactiveInterval 设置为 3600 秒,但是当我在我的机器上运行前端并且后端具有上述更改时,我得到了一个 30 分钟的会话。

更奇怪的是,如果我从 HttpSecurity setMaxInactiveInterval() 配置任何小于 30 分钟的值,它就会起作用,我得到了一个所需时间值的会话,但如果我尝试使用更大的值超过 30 分钟,不知何故会话将在 30 分钟后到期。

【问题讨论】:

    标签: java spring session timeout hazelcast


    【解决方案1】:

    我发现 SpringBoot 1.5 使用的 spring-session.1.3.6 在其 HazelcastSessionRepository 保存方法中有一个错误。在 Hazelcast 会话中记录了更改会话的 maxInactiveInterval,但在 Hazelcast IMap 中保存 Hazelcast 会话对象的 ttl 在创建后不会更改。当默认的 maxInactiveInterval 30 分钟过去后,会话将从 IMap 中删除并且会话过期。

    它看起来在 SpringBoot 2.x 中已经改变了,但由于我们仍然在 1.5 上,我修补了我们使用的版本,现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2015-05-21
      • 1970-01-01
      • 2016-09-15
      • 2020-11-14
      • 2018-09-27
      相关资源
      最近更新 更多