2013-02-08 53 views
0

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

  1. 日志与四郎系统A中,创建另一会话(或一些数据保持器对象来存储会话数据)使用shiro会话ID,将其存储在后端(db或cache)中。
  2. 做系统A中的东西,将会话数据放入上面创建的会话中,写入后端。
  3. 当系统A发出另一个请求时,找到一个会话,该会话的ID与shiro会话ID匹配,如果找到,使用它,否则创建一个新会话。

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

+0

彼得斯答案是这样做的好方法。你也可以在Karaf或ops4j邮件列表中得到更多关于这个toppic的答案。 – 2013-02-09 06:48:43

回答

0

我已经用Servlet Filter做了类似的事情。我的HtppSession包含授权ID,然后我查找并提供该请求的安全上下文。如果不存在安全标识,则客户端被强制登录。显然,安全上下文可以保存在分发机制中,以便可以从集群中的所有系统获得。

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