【问题标题】:How to set expiration date-time of JSESSION cookie with Spring Boot如何使用 Spring Boot 设置 JSESSION cookie 的过期日期时间
【发布时间】:2019-05-23 13:27:15
【问题描述】:

我有一个基于 SpringBoot 并使用 Spring Security 进行登录和 Remember-Me 的 Web 应用程序,但是 Remember-Me 无法正常工作,并在客户端和服务器之间没有交互 1 小时后重置。

我已检查浏览器的 cookie 存储,remember-me cookie 已创建并且具有正确的到期日期(创建后 1 天)。第二个cookie: JSESSION 有过期=会话。我认为这是造成问题的原因。

+-------------+-----------+------+--------------------------------+
|    Name     |  Domain   | Path | Expires on                     |
+-------------+-----------+------+--------------------------------+
| JSESSIONID  | 127.0.0.1 | /    | session                        |
| remember-me | 127.0.0.1 | /    | Tue, 25 Dec 2018 10:28:22 GMT  |
+-------------+-----------+------+--------------------------------+

这是我记忆我的弹簧安全配置:

.and()
.rememberMe()
.key("secretKey")
.tokenValiditySeconds(60*60*24)
.rememberMeParameter("remember-me");

我希望一旦用户登录并选择了记住我选项,他/她将在接下来的 24 小时内无需再次登录。那么是否有可能将此 JSESSION 过期设置为等于记住我的 cookie?我使用注释驱动的 Spring Boot

【问题讨论】:

  • @dur 是的,在一个小时不活动(不发送任何请求)后,如果我点击任何链接,我会自动注销,因此最终会看到登录页面

标签: java spring spring-boot cookies spring-security


【解决方案1】:

JSESSIONID 是保存会话 ID 的 cookie。您不需要将JSESSIONID 的过期时间设置为remember-me。

该机制将能够跨多个会话识别用户 - 所以首先要了解的是记住我只有在会话超时后才会启动。默认情况下,这发生在 30 分钟不活动后,但在 web.xml 中是 timeout can be configured。在 Spring boot 中,您可以通过 this link 配置超时。

Remember Me cookie 包含以下数据:

  • 用户名——用于识别登录的主体
  • expirationTime – 使 cookie 过期;默认为 2 周
  • MD5 哈希值——前 2 个值——用户名和过期时间,加上密码和预定义密钥

所以记住用户凭据就足够了。 JSESSIONID 将在会话到期或用户关闭浏览器时删除。用户回来后,​​他将获得新的会话 ID,而无需使用有效的记住我的 cookie 再次登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2017-02-19
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2017-03-06
    相关资源
    最近更新 更多