Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Shiro不同领域的不同饼干_Java_Security_Jakarta Ee_Shiro - Fatal编程技术网

Java Shiro不同领域的不同饼干

Java Shiro不同领域的不同饼干,java,security,jakarta-ee,shiro,Java,Security,Jakarta Ee,Shiro,假设我的应用程序处理两种特定的url模式 /foo/*->只有FooUsers才有权访问,并在FooUserRealm中进行身份验证 /bar/*->只有BarUsers才有权访问,并在BarUserRealm中进行身份验证 我可以通过为这些url模式分配两个单独的authc过滤器并创建两个不同的身份验证令牌实例来处理正确领域的选择,然后领域只需声明它们支持哪种令牌类型 但是,我无法实现的是,经过身份验证后,用户将可以访问/bar/*URL,反之亦然。我真正想要实现的是,每个领域都有两个独立

假设我的应用程序处理两种特定的url模式

  • /foo/*->只有FooUsers才有权访问,并在FooUserRealm中进行身份验证
  • /bar/*->只有BarUsers才有权访问,并在BarUserRealm中进行身份验证
我可以通过为这些url模式分配两个单独的authc过滤器并创建两个不同的身份验证令牌实例来处理正确领域的选择,然后领域只需声明它们支持哪种令牌类型

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

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


有更好的方法吗?

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

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


因此,如果我是你,我会创建两个不同的SecurityManager,每个都在SessionManager上设置了自己的cookie id。

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