是否可以将两个不同的spring-session应用程序与一个redis服务器一起使用?

时间:2015-07-24 17:10:23

标签: spring spring-session

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

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

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

Spring会话如何避免使用一台redis服务器在不同应用程序之间发生会话ID冲突?

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

1 个答案:

答案 0 :(得分: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进行身份验证时,他们无权使用它。 / p>