2016-03-29 1 views
0

Pour un test d'intégration EAR, j'ai besoin de mon Wildfly pour pouvoir connecter différents utilisateurs avec un rôle spécifique.Wildfly Connexion avec nom d'utilisateur et rôle

  • org.jboss.security.auth.spi.SimpleServerLoginModule ne me permet pas de préciser un rôle
  • org.jboss.security.auth.spi.IdentityLoginModule ne permet pas différents utilisateurs

donc évidemment je dois utiliser quelque chose de différent. J'ai essayé d'utiliser une base de données temporaire comme ceci:

<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" 
     flag="required"> 
    <module-option name="dsJndiName" value="java:/AcmeDS" /> 
    <module-option name="principalsQuery" value="SELECT ?" /> 
    <module-option name="rolesQuery" value="SELECT 'my_role', 'Roles'" /> 
    <module-option name="password-stacking" value="useFirstPass" /> 
</login-module> 

... aaand:

<datasources> 
    <datasource jndi-name="java:/AcmeDS" pool-name="AcmeDS" enabled="true"> 
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> 
    <driver>h2</driver> 
     <pool> 
      <min-pool-size>10</min-pool-size> 
      <max-pool-size>20</max-pool-size> 
      <prefill>true</prefill> 
     </pool> 
     <security> 
      <user-name>sa</user-name> 
      <password>sa</password> 
     </security> 
    </datasource> 
    <drivers> 
     <driver name="h2" module="com.h2database.h2"> 
      <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
     </driver> 
    </drivers> 
</datasources> 

Comme suggéré dans le JBoss tutorial. Cependant, je reçois l'exception suivante pour les clients:

java.lang.RuntimeException: javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms 
at org.jboss.ejb.client.remoting.IoFutureHelper.get(IoFutureHelper.java:92) 
at org.jboss.ejb.client.remoting.ConnectionPool.getConnection(ConnectionPool.java:77) 
at org.jboss.ejb.client.remoting.RemotingConnectionManager.getConnection(RemotingConnectionManager.java:51) 
at org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.setupEJBReceivers(ConfigBasedEJBClientContextSelector.java:155) 
at org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.getCurrent(ConfigBasedEJBClientContextSelector.java:115) 

5 minutes plus tard, je suis arrivé (je ne suis pas au courant de tout changement): all available authentication mechanisms failed

(Il a travaillé droit jusqu'au point où je besoin d'un rôle , donc je suppose que la configuration pour le côté client est correct.)

Qu'est-ce que j'ai fait Je me trompe? Comment puis-je faire en sorte que le Wildfly affiche au moins des exceptions ou quelque chose pour que je puisse déboguer le problème? Existe-t-il un meilleur moyen d'amener le Wilfly à reconnaître différents utilisateurs avec un rôle spécifique?

Répondre

1

Regardez le Java Security Quickstart Archetype. Il a travaillé sur la sécurité de Java EE, au moins au niveau que je pense que vous essayez de faire.

En bref, vous devez avoir une sécurité de domaine, plus comme ceci:

<security-domain name="jboss-security-quickstart" cache-type="default"> 
<authentication> 
    <login-module code="Database" flag="required"> 
     <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/> 
     <module-option name="principalsQuery" value="SELECT PASSWORD FROM USER WHERE EMAIL=?"/> 
     <module-option name="rolesQuery" value="SELECT R.ROLE, 'Roles' FROM ROLE R INNER JOIN USER_ROLE UR ON UR.ROLES_ID = R.ID INNER JOIN USER U ON U.ID = UR.USER_ID WHERE U.EMAIL=?"/> 
     <module-option name="hashAlgorithm" value="SHA-256"/> 
     <module-option name="hashEncoding" value="base64"/> 
     <module-option name="hashCharset" value="utf-8"/> 
     </login-module> 
    </authentication> 
</security-domain> 

Vous devez avoir un jboss-web.xml dans votre répertoire WEB-INF qui pointe vers elle:

<!DOCTYPE jboss-web> 
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.jboss.org/schema/jbossas 
    http://www.jboss.org/schema/jbossas/jboss-web_7_2.xsd"> 
    <!-- Configure usage of the security domain "javaee-security-quickstart" --> 
    <security-domain>javaee-security-quickstart</security-domain> 
    <disable-audit>true</disable-audit> 
</jboss-web> 

Et web.xml qui l'utilise:

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>User Views</web-resource-name> 
     <url-pattern>/views/user/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>ADMIN</role-name> 
     <role-name>USER</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
     <form-login-page>/views/login.xhtml</form-login-page> 
     <form-error-page>/views/login.xhtml?Retry=True</form-error-page> 
    </form-login-config> 
</login-config> 
<security-role> 
    <role-name>ADMIN</role-name> 
</security-role> 
<security-role> 
    <role-name>USER</role-name> 
</security-role> 

ce sont les bases, mais il est un peu plus facile de le voir en action.

+0

Merci, mais je ne veux pas vraiment avoir une base de données si possible, car cela rendrait l'installation beaucoup plus complexe. –