是否可以在一个 Redis 服务器上使用两个不同的 spring-session 应用程序?

Is it possible to use two different spring-session applications with one redis server?

我已经开始使用 spring 会话成功地使用一个 nginx、两个 tomcat 和一个 redis 服务器来实现集群会话,但出现了一些问题。 首先,当我谈论不同的应用程序时,我指的是两个完整的应用程序,我不是在谈论同一应用程序的两个实例。

我可以使用两个或多个不同的 spring-session 应用程序来存储生产中只有一个 redis 服务器的会话吗?

这些应用程序可以 运行 在不同的 tomcats 实例中?

session如何Spring避免一台redis服务器不同应用之间的session id冲突?

是否需要附加后缀或前缀id来避免这个问题?

Spring Session 目前不原生支持范围会话。有关跟踪此问题的详细信息,请参阅 gh-166

Spring 会话为会话 ID 生成一个具有高熵的安全随机 ID,因此发生冲突的可能性极低。

这意味着您可以使用 Spring Session 为多个应用程序使用相同的 Redis 实例,只要您接受以下语句即可:

恶意用户可以将应用程序 A 的会话 ID 用于应用程序 B。为什么这很重要?考虑以下情况:

  • 应用程序 A 是一个 public 应用程序,任何用户都可以为其创建帐户。
  • 应用程序B是一个私人应用程序,只有被邀请的用户才能注册。
  • 恶意用户创建一个帐户并使用应用程序 A 进行身份验证
  • 用户复制了应用程序 A 的会话 ID。他们导航到应用程序 B 并将会话 ID 粘贴到应用程序 B 的 cookie 中,现在已通过身份验证。

这对您来说可能不是问题。例如,良好的安全实践将通过在应用程序 B 中查找 ADMIN 角色来确保用户获得适当授权。应用程序 A 不会填充该角色,因此当用户通过应用程序 B 进行身份验证时,他们无权使用它。