gpt4 book ai didi

java - Java WS 中的 session 信息保存在哪里

转载 作者:行者123 更新时间:2023-12-01 15:25:05 26 4
gpt4 key购买 nike

我正在构建一个安全系统,必须确保发送消息的用户与接收访问 key 的用户相同。示例。

用户 Bob 有一个属性 uniqueCode,该属性对于他来说是唯一的,并且使他能够从服务器接收各种信息。

有一个 Web 服务,它有多种方法来返回各种敏感数据。当用户使用的客户端首次连接到 Web 服务时,它会通过身份验证方法进行连接,

  1. 为此用户生成伪随 secret 钥
  2. 将该 key 保存在服务器上并将其返回给用户。

从客户端到 WS 的每个后续请求都需要 uniqueCode 和 key 。如果该对有效,则请求将返回所需的信息。如果x分钟没有任何 Activity ,则 key 失效,客户端要求用户重新登录。

现在我的问题是,如何将 key 存储在服务器上? key 是一个可以序列化的 Java 对象。

我的选择

  • 让他们保持在一个 session 中。这是公司一位高级程序员的建议,但这似乎不是可行的方法。我读到的所有地方都建议 WS 不应依赖底层 HTTP session 。
  • 将它们保存在数据库中。一个可能的解决方案,但这需要我创建一个特定的数据库,从而为问题添加了另一个层次。
  • 将它们保存在二进制加密文件中。这似乎是一条出路,但真的是这样吗?由于我会在登录时生成 key ,因此我可以将 key +一些信息保存在二进制文件中,自行加密,然后将其传递给用户。如果我收到的 key 可以解密用户文件,并且信息正确,则返回用户请求的信息。

我的想法正确吗,还是我遗漏了什么?我认为最后一种方法是最安全的方法,因为如果有人访问我的系统,闯入数据库会很容易,但在不知道另一个用户 key 的情况下破译文件将非常困难。

谢谢!

最佳答案

是否需要保留 key ,以便服务器重启后可用?

如果是,那么您必须将 key 保存在数据库、文件系统或其他适合您的机制中。我会选择数据库 - 这样,当您移动应用程序、更改权限等时,您就不会依赖文件系统。

如果不是,为什么不在应用程序中使用一些带有 Time To Live 的缓存呢?只需使用 uniqueCode 作为 key ,并使用加密 key 作为值。流行的选择是:

  • Ehcache
  • Guava Caches
  • 如果您不介意按时手动清理旧 session ,普通的旧 HashMap 就可以了。

关于java - Java WS 中的 session 信息保存在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com