登录JSF spring和hibernate错误



我正在开发一个使用jsf、spring和hibernate的登录应用程序。我有一个问题,我得到无效的密码和用户名,即使我把有效的用户名和密码。我不明白为什么。请帮帮我:)

login.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:h="http://java.sun.com/jsf/html"  
      xmlns:f="http://java.sun.com/jsf/core"  
      xmlns:p="http://primefaces.org/ui"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
    <h:head>
        <title>Facelet Title</title>
        <link href="http://localhost:8084/jsf/resources/css/login.css" type="text/css" rel="stylesheet"/>
    </h:head>
    <h:body>
        <div class="container">
        <h:form id="formLogin">            
    <p:growl id="growl" sticky="true" showDetail="true" life="3000" />
    <p:panel header="Login">
        <h:panelGrid columns="2" cellpadding="5">
            <h:outputLabel for="username" value="Username:" />
            <p:inputText id="username" value="#{utilisateurBean.utilisateur.username}" required="true" label="username" />
            <h:outputLabel for="password" value="Password:" />
            <p:password id="password" value="#{utilisateurBean.utilisateur.password}" required="true" label="password" />
            <f:facet name="footer">
                <p:commandButton value="Login" update="growl" actionListener="#{utilisateurBean.login(actionEvent)}" 
                                 oncomplete="handleLoginRequest(xhr, status, args)" />
            </f:facet>  
        </h:panelGrid>
    </p:panel>
</h:form>
        </div>
<script type="text/javascript">
    function handleLoginRequest(xhr, status, args) {
        if(args.validationFailed || !args.loggedIn) {
            PF('#formLogin').jq.effect("shake", {times:5}, 100);
        }
        else {
            location.href = args.route;
        }
    }
</script>
    </h:body>
</html>

UtilisateurBean.java

package controller;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import model.services.UtilisateurMetier;
import model.services.UtilisateurMetierImpl;
import net.vo.Utilisateur;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("view")
public class UtilisateurBean{
    private Utilisateur utilisateur;
    @Autowired
    private UtilisateurMetier utilisateurMetier;
    String route = "";
    public UtilisateurBean() {
        this.utilisateurMetier = new UtilisateurMetierImpl();
        if(this.utilisateur == null)
        {
            this.utilisateur = new Utilisateur();
        }
    }
    public Utilisateur getUtilisateur() {
        return utilisateur;
    }
    public void setUtilisateur(Utilisateur utilisateur) {
        this.utilisateur = utilisateur;
    }
    public void login(ActionEvent actionEvent)
    {    
        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg;
        boolean loggedIn;
        this.utilisateur = this.utilisateurMetier.verify(this.utilisateur);
        if (this.utilisateur != null)
        {
            loggedIn = true;
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("utilisateur", this.utilisateur.getUsername());
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", this.utilisateur.getUsername());
            route ="/jsf/faces/annee.xhtml";
            System.out.println(this.utilisateur.getUsername());
        } else {
            loggedIn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid mot de passe");
            if(this.utilisateur == null)
        {
            this.utilisateur = new Utilisateur();
        }
        }
        FacesContext.getCurrentInstance().addMessage(null, msg);
        context.addCallbackParam("loggedIn", loggedIn);
        context.addCallbackParam("route", route);
    }
}

UtilisateurMetier.java

package model.services;
import java.util.List;
import net.vo.Utilisateur;
public interface UtilisateurMetier {
    public Utilisateur verify(Utilisateur utilisateur);
}

UtilisateurMetierImpl.java

package model.services;
import dao.UtilisateurDao;
import java.util.List;
import javax.faces.context.FacesContext;
import net.vo.Utilisateur;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UtilisateurMetierImpl implements UtilisateurMetier{
    @Autowired
    private UtilisateurDao dao;

    public void setDao(UtilisateurDao dao) {
        this.dao = dao;
    }
    @Override
    public Utilisateur verify(Utilisateur utilisateur)
    {
       return dao.verify(utilisateur);
    }
}

UtilisateurDao.java

package dao;
import java.util.List;
import net.vo.Utilisateur;
public interface UtilisateurDao {
    public Utilisateur getUtilisateur(Integer id);
    public Utilisateur verify(Utilisateur utilisateur);
}

UtilisateurHibernateDao.java

package dao;
import java.util.List;
import net.vo.Utilisateur;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.stereotype.Repository;
@Repository
public class UtilisateurHibernateDao implements UtilisateurDao{
    private List<Utilisateur> listeUtilisateurs;
@Override
public Utilisateur getUtilisateur(Integer id) {
   Session session = HibernateUtil.getSession();
   try
   {
       session.beginTransaction();
       Query q = session.createQuery("from Utilisateur as u where u.idUtilisateur=" + id);
       return (Utilisateur) q.uniqueResult();
   }
   finally
   {
       session.close();
   }
}
@Override
public Utilisateur verify(Utilisateur utilisateur) {
    Utilisateur user = this.getUtilisateur(utilisateur.getIdUtilisateur());
    if(user != null)
    {
        if(!utilisateur.getPassword().equals(user.getPassword()))
        {
            user = null;
        }
    }
    return user;
}
}

Utilisateur.java

package net.vo;
// Generated 21 mai 2014 21:08:45 by Hibernate Tools 3.6.0

/**
 * Utilisateur generated by hbm2java
 */
public class Utilisateur  implements java.io.Serializable {

     private int idUtilisateur;
     private String username;
     private String password;
    public Utilisateur() {
    }
    public Utilisateur(int idUtilisateur, String username, String password) {
       this.idUtilisateur = idUtilisateur;
       this.username = username;
       this.password = password;
    }
    public int getIdUtilisateur() {
        return this.idUtilisateur;
    }
    public void setIdUtilisateur(int idUtilisateur) {
        this.idUtilisateur = idUtilisateur;
    }
    public String getUsername() {
        return this.username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return this.password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

编辑

 public void login(ActionEvent actionEvent)
    {    
        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg;
        boolean loggedIn;
        this.utilisateur = this.utilisateurMetier.verify(this.utilisateur);
        if (this.utilisateur != null)
        {
            loggedIn = true;
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("utilisateur", this.utilisateur.getUsername());
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", this.utilisateur.getUsername());
            route ="/jsf/faces/index.xhtml";
            System.out.println(this.utilisateur.getUsername());
        } else {
            loggedIn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid mot de passe");
             if(this.utilisateur == null)
            {
                this.utilisateur = new Utilisateur();
            }
        }
        FacesContext.getCurrentInstance().addMessage(null, msg);
        context.addCallbackParam("loggedIn", loggedIn);
        context.addCallbackParam("route", route);
    }

UtilisateurHibernateDao#verify中,您试图从其id检索用户:

Utilisateur user = this.getUtilisateur(utilisateur.getIdUtilisateur());

但是你只有用户名和密码。我建议创建另一个方法,可以从用户名返回用户:

public Utilisateur getUtilisateurByUsername(String username) {
    Session session = HibernateUtil.getSession();
    try {
        session.beginTransaction();
        Query q = session.createQuery("from Utilisateur as u where u.username=:username")
            .setString("username", username);
        return (Utilisateur) q.uniqueResult();
    }
    finally {
        session.close();
    }
}

并在verify中使用此方法:

Utilisateur user = this.getUtilisateurByUsername(utilisateur.getUsername());
//rest of the code...

不是主要问题的一部分,但在我看来,verify方法应该在服务水平,而不是在dao。数据访问对象仅用于检索和更新数据源中的数据,而业务规则应位于服务层。

相关内容

  • 没有找到相关文章

最新更新