Play框架具有缓存(https://www.playframework.com/documentation/2.5.x/JavaCache),这是一个全局缓存。
在我们的例子中,当用户登录时。我们需要存储一个值来跟踪特定会话。目前,我们被迫形成具有会话ID的密钥,以便密钥在Play缓存中是唯一的。
这引起了几个问题。
目前,我们存储在全球地图中,可用于所有登录。
它很容易受到攻击,因为地图会公开任何用户的所有值。
在Java Servlet应用程序中,我们使用Thread Local,我们不能在Play中使用它,因为它是异步框架。
请详细告诉我。
感谢。
答案 0 :(得分:1)
正如Thilo建议你可以使用Cookie。
请注意,Play确实具有Session的概念 - 这确实是一个Cookie(因为Play的体系结构是完全无状态的)。
来自docs: -
由于Session只是一个Cookie,它也只是一个HTTP标头,但是Play提供了一个辅助方法来存储会话值:
public Result login() {
session("connected", "user@gmail.com");
return ok("Welcome!");
}
同样,您可以从传入会话中删除任何值:
public Result logout() {
session().remove("connected");
return ok("Bye");
}
如果数据是敏感的,那么你需要考虑保护它,即。加密它。
如果数据很大,那么你应该考虑缓存。
缓存与您自己的HashMap?
那是一个更大的讨论。如果您的应用程序增长并且您已经扩展,那么您将如何读取/写入/同步多个HashMaps?你不想要一些驱逐政策等等。