Bonjour à tous et à toutes.
Je travaille actuellement sur un projet d'authentification formulaire JSF
pour donnner accès aux utilisateurs inscrits en base un accès à un espace membre restrein.
Environnements tecchniques : Java EE 6, JSF, MySQL, JPA EclipseLink, Glasfish, Windows
Voici en gros mon erreur sur formulaire après la gestion de l'exception :
Avertissement: JSF1063 : AVERTISSEMENT ! Définition d’une valeur d’attribut non-sérialisable dans HttpSession (clé : connexionBean, classe de la valeur : com.sdmnj.beans.ConnexionBean).
Avertissement: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Failed file login for tartanpion@tartanpion.ta
Grave: javax.servlet.ServletException: Login failed.
1- Vue connexion.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Formulaire - Authentification</title>
<h:outputStylesheet library="default" name="css/form.css" />
</h:head>
<h:body>
<div>
<h:form id="auth">
<fieldset>
<legend>Connexion</legend>
<p>Connexion via ce formulaire</p>
<h:outputLabel for="email">Login<span class="requis">*</span></h:outputLabel>
<h:inputText id="email" value="#{connexionBean.utilisateur.email}"></h:inputText>
<h:message id="emailMessage" for="email" errorClass="erreur" />
<br />
<h:outputLabel for="motdepasse">Mot de passe<span class="requis">*</span></h:outputLabel>
<h:inputSecret id="motdepasse" value="#{connexionBean.utilisateur.motDePasse}"></h:inputSecret>
<h:message id="motDePasseMessage" for="motdepasse" errorClass="erreur" />
<br />
<h:messages globalOnly="true" infoClass="info" />
<h:commandButton value="Connexion" action="#{connexionBean.seConnecter}" styleClass="sansLabel" />
</fieldset>
</h:form>
</div>
</h:body>
</html>
2- Fichier ConnexionBean.java
package com.sdmnj.beans;
import com.sdmnj.dao.UtilisateurDao;
import com.sdmnj.entities.Utilisateur;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ManagedBean
@SessionScoped
public class ConnexionBean {
private Utilisateur utilisateur;
@EJB
private UtilisateurDao utilisateurDao;
public ConnexionBean(){
utilisateur = new Utilisateur();
}
public Utilisateur getUtilisateur() {
return utilisateur;
}
public String seConnecter() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.login( utilisateur.getEmail(), utilisateur.getMotDePasse() );
}catch( ServletException e ) {
e.printStackTrace();
context.addMessage( null, new FacesMessage("Login failed.") );
return "failure";
}
return "succes";
}
public String seDeconnectetr() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.logout();
}catch( ServletException e ) {
e.printStackTrace();
context.addMessage( null, new FacesMessage("logout failed.") );
return "failure";
}
return "succes";
}
}
3- Fichier faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<managed-bean>
<managed-bean-name>connexionBean</managed-bean-name>
<managed-bean-class>com.sdmnj.beans.ConnexionBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<display-name>connexion</display-name>
<from-view-id>/connexion.xhtml</from-view-id>
<navigation-case>
<from-outcome>succes</from-outcome>
<to-view-id>/restrein/main_page.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/connexion.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
4- Fichier DAO : UtilisateurDao
package com.sdmnj.dao;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.sdmnj.entities.Utilisateur;
@Stateless
public class UtilisateurDao {
private static final String JPQL_SELECT_PAR_EMAIL = "SELECT u FROM Utilisateur u WHERE u.email=:email";
private static final String PARAM_EMAIL = "email";
@PersistenceContext( unitName = "bdd_sdmnj_PU" )
private EntityManager em;
public void creer( Utilisateur utilisateur ) throws DAOException {
try {
em.persist( utilisateur );
} catch ( Exception e ) {
throw new DAOException( e );
}
}
public Utilisateur trouver( String email ) throws DAOException {
Utilisateur utilisateur = null;
Query requete = em.createQuery( JPQL_SELECT_PAR_EMAIL );
requete.setParameter( PARAM_EMAIL, email );
try {
utilisateur = (Utilisateur) requete.getSingleResult();
} catch ( NoResultException e ) {
return null;
} catch ( Exception e ) {
throw new DAOException( e );
}
return utilisateur;
}
}
5- L'entité Utilisateur comporte les champs suivants :
{id, email, motDePasse, nom, date_inscription}
Les tests d'inscriptions en bdd fonctionnent mais mon pb est l'authentification
et je pense tres probablement à la méthode seConnecter.
Je suis patient de vous lire et de vos aides.
Partager