服务器断开连接后如何在 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 中保持客户端会话处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章
传统的Spring Web MVC如何像WebFlux一样异步处理请求?