- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个需要基于对象的身份验证和授权的服务器端应用程序。我喜欢 Shiro 的简单,但是为了兼容 JAAS,我写了一个 LoginModule,它使用 Apache Shiro 作为底层机制。
但我的问题是我找不到将 JAAS 授权检查委托(delegate)给 Shiro 的方法。我怎样才能做到这一点?
最佳答案
注意:答案解决了通过标准安全框架将外部授权系统与 JVM 集成的一般情况。它不是特定于 Shiro 或 JMX 的,因为我对它们都不熟悉。
从概念上讲,您似乎是在策略决策点 (PDP) 之后——即评估授权查询(“实体 X 是否允许执行 Y?”)的设施。 JDK 提供了以下几种:
SecurityManager
,特别是它的 checkXXX
方法组。 ProtectionDomain
类,尤其是它的 implies(Permission)
方法。 implies(ProtectionDomain, Permission)
有效的方法 Policy
. implies
CodeSource
的方法, PermissionCollection
, Permission
, 和 Principal
. AccessControlContext
-独立的。 Shiro 本地授权属性 (SNAA),无论它们是什么,都适用于整个线程。代码来源无关紧要。 AccessControlContext
-独立的。 AccessControlContext
-依赖。 javax.security.auth
用于认证的SPI,忘记建立标准Subject
作为认证结果,而不是直接将 Shiro 特定的绑定(bind)到线程本地存储。这样您就可以更方便地访问 SNAA,而不必使用 AccessControlContext
(并遭受潜在的 performance penalty ),以进行检索。SecurityManager
,至少覆盖两个 checkPermission
方法,使他们Permission
在 SecurityException
)。 System::setSecurityManager
) 您的实现。
Subject
与线程本身。 SecurityManager
,至少覆盖两个 checkPermission
方法,这一次,它们委托(delegate)给 SPDP 和/或覆盖的实现(相应地,在当前或提供的访问控制上下文上调用 checkPermission
)。对于任何给定的许可,应该咨询哪个(哪些)和以什么顺序当然取决于实现。当两者都被调用时,应该首先查询 SPDP,因为它可能比访问控制上下文响应得更快。 Policy
子类化。 , 实现 implies(ProtectionDomain, Permission)
这样,比如 SecurityManager::checkPermission
上面,它将域的一些可理解的表示(通常只有它的 CodeSource
)和权限参数——但逻辑上不是 SNAA——传递给 SPDP。实现应该尽可能高效,因为它将在每个域每个访问控制上下文中调用一次 checkPermission
。时间。实例化并安装 ( Policy::setPolicy
) 您的实现。 ThreadLocal
那样微不足道。在这种情况下。Policy
执行 SecurityManager::checkPermission
的组合职责和 Policy::implies
,如在第二种情况中单独描述的那样。SecurityManager
.ProtectionDomain
子类,能够存储和暴露 SNAA。DomainCombiner
那combine(ProtectionDomain[], ProtectionDomain[])
以至于Policy::implies
,实现应该是高效的(例如,通过消除重复项),因为它会在每次
getContext
时被调用。和
checkPermission
AccessController
方法是。
AccessControlContext
包装当前的,以及自定义 DomainCombiner
的一个实例,依次包装 SNAA。包装要执行的代码AccessController::doPrivilegedWithCombiner
调用,还传递替换访问控制上下文。Principal
s 和,使用标准
SubjectDomainCombiner
,将它们绑定(bind)到当前
AccessControlContext
的域(如上,或只是通过
Subject::doAs
)。这种方法是否会降低策略的效率主要取决于调用堆栈的深度(访问控制上下文包含多少个不同的域)。最终,您认为可以避免作为域组合器的一部分实现的缓存优化将在编写策略时回击您,因此这实际上是您在那时必须做出的设计决策。
关于java - 如何将 JAAS 授权检查委托(delegate)给 Shiro?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736077/
我正在尝试在 Tomcat 7 上实现一个具有领域配置的简单 JAAS 模块。我正在尝试基于以下链接实现它: http://www.byteslounge.com/tutorials/jaas-aut
我想一个使用 NTLoginModule 进行身份验证的 jaas.conf 文件示例会有所帮助。 最佳答案 我不确定那是不是你的意思,但我想你可以: SomeName { com.sun.se
我正在使用这个 Helm chart :https://github.com/helm/charts/tree/master/incubator/kafka 以及 values.yaml 中的这些覆盖
我试图弄清楚登录模块标志在 JAAS 中是如何工作的(使用 JBoss 5.1 EAP),我遇到了一个令人费解的情况,我希望有人能为我澄清一下。 对于背景,我的 login-config.xml 如下
我实现了一个通过 Web 服务访问的自定义 loginModule,并在 JPA 访问的 DB 前面检查用户名和密码。 我在 jboss 7.1 上运行它,它运行良好,但是在将它移动到 Wildfly
我想知道使用 对数据库表上的应用程序用户进行身份验证的最简单方法贾斯 . 由于带有用户名/散列密码的数据库表可能是最常见的解决方案,是否有“提供”的 LoginModule 用于这种身份验证? 最佳答
我有以下代码来运行 Java (SE) 应用程序(不在服务器上),其中应该使用运行 JAAS 身份验证的现有 JBoss 服务器(我绑定(bind)到 4.2.3)来完成登录。我从一个简单的控制台应用
我刚刚完成了本教程: http://java.sun.com/docs/books/tutorial/security/tour2/index.html 并且对 JAAS 的基本概念感到好奇...如果
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我正在尝试设计一个 JAAS 微服务来处理多个 J2EE 应用程序的用户身份验证。目前我们有多个应用程序根据我们的 LDAP 进行身份验证并具有单独的角色系统。现在我一直在设计应用程序和身份验证后端之
我有一个带有 JAAS 的应用程序,我需要从遗留系统进行外部登录,所以我用下面的代码编写了一个 servlet,它工作正常,但是当我再次提交时,JAAS 尝试再次进行身份验证并失败,并且用户被重定向到
我正在学习 Java 安全 JCE/JAAS。我无法获得我们需要在实际 Web 应用程序中实现 JAAS 登录模块的示例。 任何人都可以指导我在我的 Web 应用程序中实现 JAAS 的位置吗?据我所
我关注了this tutorial学习JAAS。这个例子对我有用,所以我创建了自己的版本(我使用的是 Tomcat 6 和 Java 6),但我无法让它工作(帖子底部的异常)。 (由于代理,我无法将
我们有一个新编写的 JAAS 模块,想知道将 DataSource 对象的数据库连接设置放在哪里。 通常在 Tomcat 网络应用程序中,这将在“web.xml”文件中引用以指向位于“$catalin
嗨,我正在使用这个 link对于基于 Java JAAS 表单的身份验证, JAAS 登录模块的实现使用数据库(postgresql)验证用户输入的用户名和密码 在 JAAS 中,我们应该创建“jas
在 WildFly 9 服务器上运行的 Java EE 应用程序中,我有一个自定义登录模块: public class MyLoginModule extends AbstractServerLogi
我正在尝试编写我的 Costum LoginModule,以便在具有基本授权的 REST 服务中使用。为此我做了以下工作: 我编写了自己的 LoginModule,称为 QuarkLoginModul
我想知道如何结合这两个身份验证步骤: 检查 LDAP 中的用户/密码 将在数据库中找到的主体(角色)添加到主题。 LDAP 用户存储库不知道应用程序特定的角色,我不想管理应用程序数据库中的密码。所以我
我在 jboss 上有一个自定义登录模块。 ear 的 META-INF 有一个指向 login-service.xml 的 jboss-app.xml,后者包含一个指向定义自定义登录模块的 logi
我很难理解 JAAS。这一切似乎都比应有的复杂(尤其是 Sun 教程)。我需要一个简单的教程或示例,说明如何在基于 Struts + Spring + Hibernate 和自定义用户存储库的 jav
我是一名优秀的程序员,十分优秀!