播放框架中的会话处理

时间:2017-12-22 15:53:05

标签: scala session playframework

我有一个基于Play框架和Scala的Web应用程序。此应用程序连接到Cassandra db,它有许多关键空间。我有不同的用户,每个用户属于一个不同的单位(我们可以说每个单位作为一个键空间)。假设我有用户名作为零售和制造,如果我使用用户名作为零售登录,它连接到零售密钥空间,并从表中提供属于零售密钥空间的数据,如果我使用用户名作为制造商登录,它给我来自属于制造密钥空间的表。

现在的问题是,如果我使用零售从chrome登录,它会从零售空间给我数据,如果我打开firefox并使用制造商登录 它连接到制造密钥空间并检索该密钥空间的数据,现在如果我回到我用零售用户名登录的chrome 并执行从制造密钥空间而不是零售密钥空间检索数据的任何操作。应用程序总是切换键空间 最新登录用户名的功能。我如何克服这一点。

1 个答案:

答案 0 :(得分:0)

听起来您正在使用单例(全局变量)来存储所有用户共享的唯一键空间,或者每个用户至少一个键空间。您想要的是为每个用户会话提供自己的密钥空间。有几种方法可以保存和恢复每个会话的用户密钥空间信息:

  • 通过cookie
  • 通过Java Web Token(JWT)
  • 通过HashMap单例,其中包含每个用户会话的条目。你需要一个软HashMap,所以老条目自我清除;谷歌番石榴有很好的实施。

Play Framework documentation包含有关此主题的信息。