2

非常に単純な認証メカニズムを使用して保護される複数の 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")...

4

2 に答える 2