0

我有 2 个 osgi 分布式网络应用程序 A(A1,A2)和 B(B1,B2),我正在使用 shiro 共享 http 会话以进行单点登录,以便登录一个系统也登录另一个系统。但是我希望除了身份验证/授权数据之外,会话数据在系统 A 和 B 之间分离,所以我需要一种方法来共享身份验证数据并分离 A 和 B 的系统特定会话数据。我正在考虑使用 shiro单点登录并为每个系统使用不同的分布式会话来存储系统特定的数据,主要工作流程是:

  1. 使用 shiro 登录系统 A,使用 shiro 会话 ID 创建另一个会话(或一些数据持有者对象来存储会话数据),将其存储在后端(数据库或缓存)中。
  2. 在系统 A 中做一些事情,将会话数据放入上面创建的会话中,写入后端。
  3. 当另一个请求进入系统 A 时,查找 id 与 shiro 会话 id 匹配的会话,如果找到,则使用它,否则创建新的。

是否有意义?这是解决我的问题的正确方法吗?什么是最好的方法?请分享你的想法。任何输入表示赞赏。谢谢你。

4

1 回答 1

0

我用 Servlet 过滤器做了类似的事情。我的 HtppSession 包含授权 id,然后我会查找并作为请求的安全上下文提供。如果不存在安全 ID,则强制客户端登录。显然,安全上下文可以保存在一个分发机制中,因此它可以从集群中的所有系统获得。

确保您在客户端和系统之间使用 https,否则有人可以窃听、读取带有 id 的 cookie,并在受害者授权的情况下登录其中一个系统。即会话劫持。

于 2013-02-08T16:43:02.810 回答