Spring Security 使用 JDBC 会话在多个 Web 应用程序之间共享相同的会话

Posted

技术标签:

【中文标题】Spring Security 使用 JDBC 会话在多个 Web 应用程序之间共享相同的会话【英文标题】:Spring Security using JDBC Sessions sharing same session across multiple web applications 【发布时间】:2021-08-19 23:39:48 【问题描述】:

我目前在多个应用程序中使用 JDBC 会话,并配置了 Spring 安全性。我需要的是同一用户的所有会话在所有应用程序中使用相同的会话。

例如,user1 将他的帐户登录到 applicationA,这会在数据库中正确创建一个会话。之后,同一个用户 1 从不同的浏览器登录到 applicationB,我需要的是该用户在两个应用程序之间共享其会话,以便用户可以从 applicationA 将某些内容保存到其会话中并使其可从 applicationB 访问。

我知道如果我从 applicationB 中的浏览器手动更改 SessionId cookie 可以实现这一点,但我需要的是 spring 在登录后自行执行此操作。

我在这里发现了一个类似的问题:How to get same session with Spring Security and Spring Session From multiple server

但答案不正确。

其他信息 JDBC:甲骨文 配置:全部采用 Java

【问题讨论】:

【参考方案1】:

似乎可以通过使用 OAuth2 并将其用户数据保存在授权服务器中来解决。这样两个应用就可以访问相同的用户数据了。

Spring Session 旨在启用会话集群,您可以让同一应用的多个实例共享外部会话存储。

【讨论】:

以上是关于Spring Security 使用 JDBC 会话在多个 Web 应用程序之间共享相同的会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中通过 jdbc 身份验证使用自定义登录页面

如何使用 Java 和 XML 配置在 Spring Security 中配置 jdbc 身份验证管理器?

带有 JDBC 身份验证的 Spring Security 5:UserDetailsS​​ervice bean 仍然在内存中,而不是 JDBC

Spring-Security:MySQL JDBC 身份验证失败

带有 jdbc 的 Spring Security 3.0

Spring-Security-Oauth2 基于JDBC存储令牌和RBAC权限认证