2016-03-29 13 views
0

Bir entegrasyon testi için EAR Benim özel bir rolle farklı kullanıcılara giriş yapabilmek için Wildfly'ime ihtiyacım var. Wildfly Kullanıcı Adı ve Rolü ile Oturum Açın

  • org.jboss.security.auth.spi.SimpleServerLoginModule

    bana farklı kullanıcılara Yani besbelli farklı bir şey kullanmak gerekir

izin vermeyen bir rol

  • org.jboss.security.auth.spi.IdentityLoginModule belirtmek izin vermez. Böyle geçici bir veritabanı kullanmaya çalıştı:

    <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> 
    

    ... Veee:

    <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> 
    

    JBoss tutorial önerildiği gibi. Hala müşterileri için aşağıdaki özel durum almak:

    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 dakika sonra (Ben herhangi bir değişiklikten haberdar değilim) var: Ben rol gerektiğinde

    all available authentication mechanisms failed (Bu noktaya kadar sağ çalıştı Bu yüzden istemci tarafında kurulumun tamam olduğunu düşünüyorum.)

    Neyi yanlış yaptım? Wildfly'i en azından istisnalar veya bir şey göstermesi için nasıl alabilirim, böylece sorunu ayıklayabilirim? Wilfly'i farklı kullanıcılara özel bir rol ile tanıtma konusunda daha iyi bir yol var mı?

  • cevap

    1

    Java Security Quickstart Archetype'a bir bakın. Java EE Security çalıştı, en azından çalıştığını düşündüğüm seviyede. Kısacası

    , daha şöyle bir güvenlik-etki alanına sahip olması gerekir:

    <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> 
    

    Bunu işaret WEB-INF dizininde bir jboss-web.xml olması gerekir:

    <!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> 
    

    Ve ister kullanan bir web.xml:

    <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> 
    

    Bu temelidir, ancak eylem görmek için biraz daha kolay.

    +0

    Teşekkürler, ancak mümkünse bir veritabanına sahip olmak istemiyorum çünkü bu, kurulumu çok daha karmaşık hale getirecektir. –