2016-05-24 7 views
0

jbossからwildfly 9に大きなWebアプリケーションを移行している途中で、いくつかの障害が発生しました。Wildfly 9セキュリティドメインは動作しません

セキュリティドメインが1つあります。

次のようにstandalone.xmlの関連する部分がある:

<subsystem xmlns="urn:jboss:domain:security:1.2"> 
    <security-domains> 
     <security-domain name="other" 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> 
      </authentication> 
     </security-domain> 
     <security-domain name="jboss-web-policy" cache-type="default"> 
      <authorization> 
       <policy-module code="Delegating" flag="required"/> 
      </authorization> 
     </security-domain> 
     <security-domain name="jboss-ejb-policy" cache-type="default"> 
      <authorization> 
       <policy-module code="Delegating" flag="required"/> 
      </authorization> 
     </security-domain> 
     <security-domain name="mydomain" cache-type="default"> 
      <authentication> 
       <login-module code="foo.token.LoginModule" flag="required"> 
        <module-option name="hashAlgorithm" value="SHA-512"/> 
        <module-option name="hashEncoding" value="base64"/> 
        <module-option name="unauthenticatedIdentity" value="guest"/> 
        <module-option name="dsJndiName" value="jdbc/fooDS"/> 
        <module-option name="principalsQuery" value="select ..."/> 
        <module-option name="rolesQuery" value="select o.name, 'Roles' from roles up join ef_usuario ..."/> 
       </login-module> 
      </authentication> 
     </security-domain> 
    </security-domains> 
</subsystem> 

foo.token.LoginModule.javaは次のようなものです:

@NoArgsConstructor 
public class FooLoginModule extends DatabaseServerLoginModule { 

    private Principal principal; 
    private String userName; 

    @Override 
    public boolean login() throws LoginException { 
     super.loginOk = false; 
     super.loginOk = tryLogin(); 
     return super.loginOk; 
    } 

    protected boolean tryLogin() throws LoginException { 
     if (doesSomeAdditionalLoginValidation()) { 
      createPrincipal(); 
      return true; 
     } 
     return false; 
    } 

    @VisibleForTesting 
    protected UserResourceClient createUserResourceClient() { 
     return new UserResourceClient(createAuth(), createEndPoint()); 
    } 

    private EndPoint createEndPoint() { 
     return new EndPointProvider(...).create(); 
    } 

    private Auth createAuth() { 
     return new AuthProvider(...).createAuth(); 
    } 

    private void createPrincipal() throws LoginException { 
     try { 
      principal = createIdentity(userName); 
     } catch (Exception e) { 
      throw new LoginException(PROCESSING_FAILED + "Failed to create principal: " + e.getMessage()); 
     } 
    } 

    @Override 
    protected String getUsername() { 
     return userName; 
    } 

    @Override 
    protected Principal getIdentity() { 
     return principal; 
    } 

} 

アプリがearとして展開なので、私が持っている.warファイルにされましたjboss-web.xml.jarファイルには私はjboss-app.xmlがあります。 JBossのウェブ:

<jboss-web> 
    <security-domain>mydomain</security-domain> 
</jboss-web> 

のJBossアプリ:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-app> 
    <security-domain>mydomain</security-domain> 
</jboss-app> 

しかし、私はアプリは@SecurityDomain("mydomain")でアノテートStateless Beanを使用しようと試みるとき、私はアクセスエラーを取得:

1935:40,530 ERROR [org.jboss.as.ejb3.invocation](デフォルトのタスク-26) WFLYEJB0034:メソッドのコンポーネントFooServiceでEJB呼び出しが失敗しました public java.lang.String fooメソッドの呼び出し: public java.lang.String beanのfoo.service.blah.FooService.find(): FooServiceは許可されていません。

@Stateless 
@SecurityDomain("mydomain") 
public class FooService { 

    public List<Foo> find() { 
     return ...; 
    } 
} 

私は接頭辞java:/jaas/はどこにでもから除去されなければならないことがわかり、私はそれをしなかったが、それでも、これは動作しません。

FooServiceのコードは次のようになります。

マイグレーションガイドに関連するように見えるその他のものは見つかりません。

私には何が欠けていますか?

答えて

0

本質的に、デフォルトの動作が変更されます。

JBoss ASでは、ロールが指定されていない場合、デフォルトの動作は@PermitAllで、これはdefault-missing-method-permissions-deny-accessで構成可能で、デフォルトは@DenyAllです。

私はこのような何かに私のstandalone.xmlを変更:

<subsystem xmlns="urn:jboss:domain:ejb3:3.0"> 
    <!-- other stuff --> 
    <default-missing-method-permissions-deny-access value="false"/> 
    <!-- other stuff --> 
</subsystem> 

そして、それは以前のように働きました。

関連する問題