服务器断开连接后如何在 Spring MVC 中保持客户端会话处于活动状态

Posted

技术标签:

【中文标题】服务器断开连接后如何在 Spring MVC 中保持客户端会话处于活动状态【英文标题】:How to keep client session alive in spring MVC after server disconnection 【发布时间】:2014-06-16 16:53:28 【问题描述】:

我正在处理Spring MVC 应用程序。通常会遇到服务器宕机时客户端会话过期的问题。

所以,我想让会话活跃起来。当服务器启动时,客户端不需要再次登录。 我们可以在数据库中保存 cookie id 或 session id 以使客户端重新连接。

【问题讨论】:

春安记住我 @NimChimpsky 不完全记得我。当用户进入系统时,无论如何服务器都会关闭一段时间并再次重新连接。 是的,这就是 spring secruity 提供的记住我的功能 【参考方案1】:

记住我的目的完全不同。不是跨服务器重启会话,而是跨客户端(浏览器)重启会话。即使使用记住我,您也无法在服务器重新启动时获取它,除非您使用 PersistentRememberMeService(到数据库)

【讨论】:

如果您将令牌设置为某个不变的值,您实际上可以使用基于令牌的策略在服务器重启之间进行身份验证。默认情况下,令牌会在每次应用程序启动时重新生成,我猜这就是您认为无法使其工作的原因。【参考方案2】:

如果你使用spring security,你可以拥有自己的SecurityContextRepository 实现(默认是HttpSessionSecurityContextRepository)来持久化数据库中的会话内容。这样,当用户展示他的 cookie 时,安全框架过滤器 (SecurityContextPersistentFilter) 将查看您的数据库中的会话。因此,即使服务器关闭,上下文仍然在数据库中可用,并且在服务器重新启动后的下一个用户请求期间加载。

如果会话持久性不是一个选项,您可能必须部署具有会话复制策略的服务器集群。

【讨论】:

【参考方案3】:

这就是你要找的吗?

how-can-i-make-the-spring-security-stores-the-http-session-in-database-so-i-can

这里是博客文章的链接:

Tomcat 7 JDBC Session Persistence

【讨论】:

以上是关于服务器断开连接后如何在 Spring MVC 中保持客户端会话处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 数据库在 8 小时后断开连接。如何预防?

传统的Spring Web MVC如何像WebFlux一样异步处理请求?

为啥 spring-boot 和 postgres 连接会在一段时间后断开?

Windows ssh - 如何在断开连接后保持进程运行

客户端断开连接后如何使命名管道不忙?

svn和工程断开连接如何在重新连接