JBoss Wildfly - base de données, le module de connexion
JBoss Wildfly 8.0.0-Finale
JSF 2.2.4
J'ai d'abord créé la connexion à l'aide de l'application-utilisateurs.propriétés et applications des rôles.les propriétés.
Ajout de l'utilisateur grâce à l'ajout de l'utilisateur.chauve-souris
Web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Resource</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/error.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
Standalone.xml
<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>
de connexion.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<div class="center">
<form method="POST" action="j_security_check" id="">
<h:panelGrid id="panel" columns="2" border="1" cellpadding="4" cellspacing="4">
<h:outputLabel for="j_username" value="Username:" />
<input type="text" name="j_username" />
<h:outputLabel for="j_password" value="Password:" />
<input type="password" name="j_password" />
<h:panelGroup>
<input type="submit" value="Login" />
</h:panelGroup>
</h:panelGrid>
</form>
</div>
</ui:composition>
Donc, qui a bien fonctionné.. maintenant je veux utiliser l'authentification de base de données.. donc j'ai changer la standalone.xml.
<login-module code="Database" flag="sufficient">
<module-option name="dsJndiName" value="java:jboss/jsi/GarageXADataSource"/>
<module-option name="principalsQuery" value="select encode(password, 'hex') from principal where username=?"/>
<module-option name="rolesQuery" value="select r.role, r.role_group from role r inner join principal p on r.role = p.role where p.username=?"/>
<module-option name="hashAlgorithm" value="SHA-512"/>
<module-option name="hashEncoding" value="hex"/>
</login-module>
Je l'utiliser sql pour insérer un rôle et un utilisateur dans la base de données ( PostgreSQL 9.3 )
INSÉRER DANS le rôle(rôle, role_group) VALUES ('admin', 'Rôles');
INSERTION
EN principal(nom d'utilisateur, email, mot de passe, rôle) VALUES ('Kris',
'[email protected]', digest('pass', 'sha512'), 'admin');
Mais la connexion ne fonctionne pas.
Je ne vois pas d'erreurs dans le journal.
J'ai utilisé cette méthode avant COMME 7.1.1 où il a travaillé.
Merci pour votre aide.
OriginalL'auteur klind | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
Tout d'abord DatabaseServerLoginModule journaux de trace de niveau, de sorte que vous devez définir org.jboss.journal de sécurité des niveaux de trace dans votre standalone.xml comme suit. Maintenant, vous pouvez voir les erreurs dans votre serveur.journal
Vous devez également ajouter un domaine-nom à l'intérieur de votre jboss-web.xml
Vous n'avez pas fourni les environs des balises autour de votre login-module extrait de code de configuration. Vous devriez avoir quelque chose de ce ci-dessous. Le nom de domaine doit correspondre à celui de votre web.xml
Une fois que vous avez fait cela, pourriez-vous poster les erreurs de votre serveur.journal.
Êtes-vous sûr? J'utilise <auth-méthode>FORMULAIRE</auth-méthode>, et mon propre domaine défini à l'intérieur de la <royaume-name> tag.
Assez sûr. Tentez une expérience: écrire un peu "aléatoire" contenu à l'intérieur de la <royaume-name> balise, par exemple <royaume-name>JD8dk3P</royaume-name>. Je suis assez sûr que votre FORMULAIRE de connexion fonctionne très bien malgré ce changement (étant donné qu'il a travaillé avant de le changer, bien sûr 🙂
J'ai donc fait comme vous l'avez dit, et devinez quoi, j'ai pu connecter! Je ne savais pas que. Il s'avère que c'est en utilisant le domaine de la configuration de mon jboss-web.xml fichier. Merci 🙂 la Réponse a été mis à jour
Merci! Quel soulagement - je serais assez embarrassé autrement. 🙂 Il y A quelques jours j'ai voulu aller au fond de la compréhension application web de configuration de la sécurité, parce que je suis gêné par l'existence d'un "royaume-nom" dans web.xml et une "sécurité-nom de domaine" dans jboss-web.xml. Quelle est la différence? Pourquoi les informations doivent être dupliqué? Ma compréhension est-ce: 1. <royaume-name> est pour <auth-méthode></auth-méthode> et <auth-méthode>DIGEST</auth-méthode>. Un <royaume-name>XYZ</royaume-name> la valeur est envoyée au client (navigateur), dans le "WWW-Authenticate" en-tête de du serveur...
OriginalL'auteur Chris Ritchie
Le problème est constante avec les "Rôles", vous devez spécifier exactement comme ça "Rôles". Exemple:
Select role, 'Roles' from Role where roleId =
OriginalL'auteur Sergii.Oliinyk
J'ai juste eu le même problème avec Wildfly, cherchez cette ligne dans votre standalone.xml
Et changement autres à votre securitydomain, dans les versions précédentes, cette option a été n est pas nécessaire.
OriginalL'auteur Juan Diego
essayez d'ajouter un fichier jboss-web.xml dans le dossier WEB-INF:
OriginalL'auteur hypery2k
J'ai été confrontée au même problème tout à l'heure, mais j'ai juste réussi à le résoudre!
Le problème semble être le principalsQuery.
Selon la la documentation, vous devez mettre le "Rôle" et "RoleGroup" dans principalsQuery et qu'il faut exactement pour correspondre.
J'ai aussi été pas voir quoi que ce soit, mais j'ai activé le dessous de la balise (tout comme Chris l'a dit) dans mon standalone.xml et maintenant, je suis capable de voir les erreurs comme "invalid login/mot de passe" dans les journaux.
Ce que j'ai fait pour confirmer que le serveur était au moins l'interrogation de la base de données était de vérifier la base de données MySQL (dans mon cas) les journaux pour voir si elle a été interrogée.
Dans l'ensemble, la configuration est ce qui fonctionne pour moi et btw, il semble que quelques-module options comme "hashEncoding" ne sont pas plus utilisés (également selon les docs).
Modifier
Il semble que, même après la mise en correspondance contre la base de données et de donner une session pour l'utilisateur, il n'est toujours pas en mesure d'accéder à la zone protégée. Je crois qu'elle a à faire quelque chose de Rôle et RoleGroup.
Voici mon web.xml:
OriginalL'auteur Renann