Shiro不同领域的不同的曲奇饼

时间:2014-03-04 10:13:29

标签: java security java-ee shiro

假设我的应用处理两个特定网址模式

  • / foo / * - >只有FooUsers才能访问,在FooUserRealm
  • 中进行身份验证
  • / bar / * - >只有BarUsers才能访问,并在BarUserRealm
  • 中进行身份验证

我可以通过为这些url模式分配两个单独的authc过滤器并创建两个不同的身份验证令牌实例来处理正确域的选择,然后域必须声明它们支持哪种令牌类型。

但是,我无法实现的是经过身份验证的FooUsers可以访问/ bar / * url,反之亦然。我真正想要实现的是每个领域有两个单独的cookie,当FooUser尝试访问/ bar / * url时,她被重定向到BarUser登录页面。只有在用户使用FooUser和BarUser域进行身份验证后(凭据不必相同,因此身份验证策略在此处没有帮助,如果用户想要访问/ foo / *和/ bar / *,则必须看到两个单独的登录页面)

我只能考虑创建两个单独的安全管理器,为这些领域和网址模式创建不同的cookie。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

目前没有简单的方法。一个安全管理器意味着一个SessionManager。一个SessionManager表示一个cookie。

我唯一能想到使用一个SecurityManager就是编写自己的SessionManager实现并将其注入到RealmSecurityManager中,但正如dom farr所暗示的那样,由于会话的耦合方式,你可能会陷入痛苦的世界到ThreadLocals。

所以,如果我是你,我会创建两个不同的SecurityManagers,每个都在SessionManager上设置自己的cookie id。