1

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

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

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

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

是否需要附加后缀或前缀 id 以避免此问题?

4

1 回答 1

3

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

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

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

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

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

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

于 2015-08-10T16:12:21.500 回答