非常に単純な認証メカニズムを使用して保護される複数の EJB JAR を持つ EAR があります。認証されている限り、すべての EJB メソッドにすべてのユーザーがアクセスできます。security-domain
そのため、jboss-app.xml
ファイルに を EARに追加して、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
、 JBoss 7は明示的なロールが指定されていない場合、すべての EJB メソッドでTRACE
明らかにデフォルトのロールを期待していることがわかりました。<NOBODY>
ログから:
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;
<NOBODY>
次に、すべてのユーザーがこのロールにマップされるように、JBoss へのロール マッピングを構成しようとしました。
<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
か? 私は本当にすべてのBeanに注釈を付けたくありません@RolesAllowed("user")
...