如何使用Spring Boot设置JSESSION cookie的到期日期时间

时间:2018-12-24 10:56:08

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

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

我已经检查了浏览器的cookie存储,创建了“记住我” 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

1 个答案:

答案 0 :(得分:1)

JSESSIONID是保存会话ID的Cookie。您无需将JSESSIONID的到期时间设置为“记住我”。

该机制将能够识别多个会话中的用户-因此首先要了解的是“记住我”仅在会话超时后才启动。默认情况下,这种情况在闲置30分钟后发生,但在web.xml中为timeout can be configured。在Spring Boot中,您可以借助this link来配置超时。

“记住我” cookie包含以下数据:

  • 用户名–标识登录的主体
  • expirationTime –使cookie过期;默认为2周
  • MD5哈希值–前两个值-用户名和到期时间,以及密码和预定义的密钥

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