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:UserDetailsService bean 仍然在内存中,而不是 JDBC