【问题标题】:Shiro different cookies for different realmsShiro 不同领域的不同 cookie
【发布时间】:2014-04-06 05:04:04
【问题描述】:

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

  • /foo/* -> 只有 FooUser 可以访问,在 FooUserRealm 中进行身份验证
  • /bar/* -> 只有 BarUser 可以访问,在 BarUserRealm 中进行身份验证

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

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

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

有没有更好的方法?

【问题讨论】:

  • 听起来像是两个应用程序?我不会创建两个 SecurityManagers - 整个世界都很痛苦,因为它们基于 ThreadLocals。
  • 也许可以扩展您关于领域是什么的问题,我也许可以提供解决方案。

标签: java security jakarta-ee shiro


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多