如何通过单点登录管理不同Web应用程序的Web会话?

时间:2013-02-08 16:05:50

标签: osgi shiro

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

  1. 使用shiro登录系统A,使用shiro会话ID创建另一个会话(或一些数据持有者对象以存储会话数据),将其存储在后端(db或缓存)中。
  2. 在系统A中执行操作,将会话数据放入上面创建的会话中,写入后端。
  3. 当系统A中有另一个请求时,查找id与shiro会话ID匹配的会话,如果找到,请使用它,否则创建新会话。
  4. 有意义吗?这是解决我问题的正确方法吗?什么是最好的方法?请分享你的想法。 任何输入都表示赞赏。 谢谢。

1 个答案:

答案 0 :(得分:0)

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

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