2016-05-24 7 views
0

Я переношу большое веб-приложение от jboss как 6 к wildfly 9 и столкнулся с несколькими препятствиями на пути.Домены безопасности Wildfly 9 не будут работать

Одним из них является домен безопасности.

Соответствующая часть 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 файлов у меня есть a 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> 

Но, когда я пытаюсь приложение пытается использовать Stateless фасоль с аннотацией @SecurityDomain("mydomain"), я получаю ошибки доступа:

19: 35: 40,530 ОШИБКА [org.jboss.as.ejb3.invocation] (задание по умолчанию -26) WFLYEJB0034: Ошибка EJB Invocation на компоненте FooService для метода public java.lang.String foo .service.blah.FooService.find(): javax.ejb.EJBAccessException: WFLYEJB0364: Invocation on method: public java.lang.String foo.service.blah.FooService.find() из bean: FooService не допускается

код The ​​FooService выглядит так:

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

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

Я вижу, что префикс java:/jaas/ должен быть удален отовсюду, и я сделал это, но все равно это не будет работать.

Невозможно найти другую вещь, которая, по-видимому, связана с руководством по миграции.

Что мне не хватает?

ответ

0

По существу, изменение поведения по умолчанию.

На JBoss AS, поведение по умолчанию было @PermitAll если никакой роли не было указано, в Wildfly, это настраивается 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> 

И это сработало, как и раньше.

Смежные вопросы