gpt4 book ai didi

java - 如何在 JBoss 7 中设置 EJB 方法的默认角色?

转载 作者:行者123 更新时间:2023-11-30 06:22:34 26 4
gpt4 key购买 nike

我有一个带有多个 EJB JAR 的 EAR,它应该通过使用非常简单的身份验证机制来保护:每个 EJB 方法都应该可供每个用户访问,只要他/她经过身份验证。所以我通过添加 security-domain 来保护 EAR 文件到 jboss-app.xml文件到 EAR:

<jboss-app>
<security-domain>my-security-domain</security-domain>
</jboss-app>

用户使用 JBoss 默认值 users.properties 进行身份验证文件。在 JBoss 4.2.3 中,这工作得很好。现在在 JBoss 7 中我得到一个授权异常:

16:45:32,791 ERROR [org.jboss.as.ejb3.invocation] (EJB default - 2) JBAS014134: EJB Invocation failed on component MyServiceBean for method public abstract java.util.List mypackage.MyService.findAllFoo(): javax.ejb.EJBAccessException: JBAS014502: Invocation on method: public abstract java.util.List mypackage.MyService.findAllFoo() of bean: MyServiceBean is not allowed

org.jboss.security 设置记录器类别后至 TRACE我发现,JBoss 7 显然需要一个默认值 <NOBODY>在没有明确指定角色时,每个 EJB 方法上的角色。来自日志:

16:45:32,791 TRACE [org.jboss.security.audit] (EJB default - 2) [Failure]Source=org.jboss.security.plugins.javaee.EJBAuthorizationHelper;Action=authorization;Exception:=PBOX000017: Acces denied: authorization failed ;Resource:=[org.jboss.security.authorization.resources.EJBResource:contextMap={policyRegistration=null}:method=public abstract java.util.List mypackage.MyService.findAllFoo():ejbMethodInterface=Remote:ejbName=MyServiceBean:ejbPrincipal=rschneider:MethodRoles=Roles(<NOBODY>,):securityRoleReferences=null:callerSubject=Betreff:
Principal: org.jboss.remoting3.security.UserPrincipal@ce844325
Principal: Roles(members:user)
Principal: CallerPrincipal(members:org.jboss.remoting3.security.UserPrincipal@ce844325)
:callerRunAs=null:callerRunAs=null:ejbRestrictionEnforcement=false:ejbVersion=2.0];policyRegistration=null;

然后我尝试在 JBoss 中配置角色映射,以便每个用户都映射到这个 <NOBODY>作用:

<security-domain name="my-security-domain" cache-type="default">
<authentication>
<login-module code="Remoting" flag="optional">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="RealmDirect" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="RoleMapping" flag="optional">
<module-option name="rolesProperties" value="${jboss.server.config.dir}/rolesMapping-roles.properties"/>
</login-module>
</authentication>
</security-domain>

rolesMapping-roles.properties 的内容文件:

user=user,<NOBODY>

这行得通,但我对这个解决方案感到非常不安。那么,有没有办法告诉 JBoss 7 为每个 EJB 方法使用默认角色,例如user ?我真的不想用 @RolesAllowed("user") 注释每个 bean。 ...

最佳答案

这并不是我的具体问题的真正答案,但它以更好的方式解决了问题。

JBoss AS/Wildfly source code 中挖掘之后跌跌撞撞 upon a blog post在评论中,我发现 <NOBODY> role 标识来自 JBoss 的 deny-all 机制,当没有为 EJB 方法指定角色时,它会自动设置。可以通过设置(如博文中所述)在 EJB 子系统配置中更改此行为:

<missing-method-permissions-excluded-mode>false</missing-method-permissions-excluded-mode>

关于java - 如何在 JBoss 7 中设置 EJB 方法的默认角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com