2014-05-16 1 views
0

Pour une raison quelconque, je ne peux pas me connecter à mon application en utilisant Wildfly, Primefaces et JAAS. Je ne l'ai pas essayé dans d'autres versions comme JBoss 7 AS parce que je veux voir ça fonctionner sur Wildfly. Après tentative de connexion en utilisant admin pour j_username et 1234 pour j_password, il redirige vers la page d'erreur de connexion. Je ne peux pas comprendre pourquoi.Wildfly avec jaas entraîne toujours une erreur de connexion

hachage MD5 econding il est juste avec le mot de passe généré par postgres

J'Acess ce JDNI et exécuter quelques querys de code Java, en concluant qu'il fonctionne.

String DATASOURCE_CONTEXT = "java:jboss/datasources/zephyrplace-ds"; 

     Connection result = null; 
     try { 
      Context initialContext = new InitialContext(); 
      if (initialContext == null){ 
      System.out.println("JNDI problem. Cannot get InitialContext."); 
      } 
      DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT); 
      if (datasource != null) { 
      result = datasource.getConnection(); 
      } 
      else { 
      System.out.println("Failed to lookup datasource."); 
      } 
     } 
     catch (NamingException ex) { 
      System.out.println("Cannot get connection: " + ex); 
     } 
     catch(SQLException ex){ 
      System.out.println("Cannot get connection: " + ex); 
     } 
     return result; 

login.xhtml (primefaces):

<h:form id="login" onsubmit="document.getElementById('login').action='j_security_check';" prependId="false"> 
    <ul class="nav navbar-nav navbar-right"> 
     <li>  
      <center> 
       <p:inputText name="j_username" placeholder="Usuario" style="margin-top:10px;margin-left:10px;" size="15" id="user" value="#{usuarioBean.usuario.usuario}" rendered="#{empty usuarioBean.usuarioLogado}"></p:inputText> 
      </center> 
     </li> 
     <li> 
      <center> 
       <p:inputText id="j_password" name="j_password" placeholder="Senha" style="margin-top:10px;margin-left:10px;" size="15" type="password" value="#{usuarioBean.usuario.senha}" rendered="#{empty usuarioBean.usuarioLogado}"></p:inputText> 
      </center> 
     </li> 
     <li> 
      <center> 
       <p:commandButton style="margin-top:10px;margin-left:10px;" value="Entrar" rendered="#{empty usuarioBean.usuarioLogado}" ajax="false"></p:commandButton> 
      </center> 
     </li> 
    </ul> 
</h:form> 

jboss-web.xml:

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

standalone.xml:

<security-domains> 
    <security-domain name="zephyrplace-security-domain" cache-type="default"> 
         <authentication> 
          <login-module code="Database" flag="required"> 
           <module-option name="dsJndiName" value="java:jboss/datasources/zephyrplace-ds"/> 
           <module-option name="principalsQuery" value="select pass from users where name=?"/> 
           <module-option name="rolesQuery" value="select role_name from user_roles where user_name = ?"/> 
           <module-option name="hashAlgorithm" value="MD5"/> 
           <module-option name="hashEncoding" value="base16"/> 
          </login-module> 
         </authentication> 
        </security-domain> 
       </security-domains> 

postgres:

CREATE TABLE "users" 
(
    "name" character varying(50), 
    pass character varying(50) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE "users" OWNER TO postgres; 

CREATE TABLE user_roles 
(
    user_name character varying(50), 
    role_name character varying 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE user_roles OWNER TO postgres; 

INSERT INTO users("name", pass) VALUES ('admin', MD5('1234')); 
INSERT INTO user_roles(user_name, role_name) VALUES ('admin', 'ADMIN'); 

web.xml:

 <!-- Protected Areas --> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Only admins</web-resource-name> 
      <url-pattern>/admin/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>ADMIN</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Users and admins</web-resource-name> 
      <url-pattern>/index/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>ADMIN</role-name> 
      <role-name>USER</role-name> 
     </auth-constraint> 
    </security-constraint> 


    <!-- Allowed Roles --> 
    <security-role> 
     <role-name>ADMIN</role-name> 
    </security-role> 
    <security-role> 
     <role-name>USER</role-name> 
    </security-role> 


    <!-- Login Prompt --> 
    <login-config>   
     <auth-method>FORM</auth-method> 
     <form-login-config> 
      <form-login-page>/login/login.xhtml</form-login-page> 
      <form-error-page>/login/login-error.xhtml</form-error-page> 
     </form-login-config> 
    </login-config> 

Répondre

1

Dans mon application, je l'utilise aussi wildfly et je configurated la sécurité sur la version autonome-full.xml. Aussi sur rolesQuery j'ai donné 'Roles' pour le nom du résultat de la requête. Désolé pour mon anglais. De cette façon est préférable d'expliquer:

<module-option name="rolesQuery" value="select role_name, 'Roles' from user_roles where user_name = ?"/> 

il pense qu'il a besoin de ce nom. ce sont les différences que je vois.

Questions connexes