Login

Sean bienvenidos a un nuevo artículo de la sección de JAVA, esta vez JAVA EE (Web), en el cual veremos como autenticar un usuario haciendo uso de JPA, PrimeFaces, JSF y una base de datos MYSQL, cabe decir que no utilizaremos ningún método de encriptación, ya que puede ser implementado por ustedes desde el backend en JAVA sin ningún problema, haciendo uso de las librerías de su gusto o método de encriptación deseado. empecemos:

Primero nuestra tabla en la base de datos:
tabla

Tenemos también nuestra pantalla de login:

Login

Nuestro proyecto debe tener la siguiente estructura e importar las librerías que aquí se pueden ver:
proyecto

Código del arhivo login.xhtml
[cc lang=»html»]
< ?xml version="1.0" encoding="UTF-8"?>

< !DOCTYPE html>


Login


Login Form



[/cc]

Login Controller:

[cc lang=»java»]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.controller;

import com.query.Query;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;

/**
*
* @author Ivan
*/
@ManagedBean(name=»login»)
@SessionScoped
public class LoginController implements Serializable {

private String username;
private String password;
private final Query query = new Query();
public String loginControl(){
if(query.loginControl(username, password)){
return «home.xhtml?faces-redirect=true»;
}
RequestContext.getCurrentInstance().update(«growl»);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, «Error», «Error de acceso»));
return «»;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

[/cc]

Código de Query.java
[cc lang=»java»]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.query;

import com.entity.Login;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
*
* @author Ivan
*/
public class Query {
public Login l = null;
EntityManagerFactory emf;
EntityManager em;
public Query(){
emf = Persistence.createEntityManagerFactory(«WebLoginPU»);
em=emf.createEntityManager();
em.getTransaction().begin();
}
public boolean loginControl(String username, String password){
try {
l = em.createNamedQuery(«Login.control», Login.class).setParameter(«username», username).setParameter(«password», password).getSingleResult();
if(l !=null){
return true;
}
return false;
} catch (Exception e) {
return false;
}
}
}

[/cc]

Nuestra entidad mapeada (Si no sabes como mapear tus tablas ni crear tu unidad de persistencia puedes pasarte por este vídeo.:
[cc lang=»java»]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
*
* @author Ivan
*/
@Entity
@Table(name = «login»)
@XmlRootElement
@NamedQueries({
@NamedQuery(name=»Login.control», query=»SELECT l FROM Login l WHERE l.loGin=:username AND l.pasSword=:password AND l.estado=’1′»),
@NamedQuery(name = «Login.findAll», query = «SELECT l FROM Login l»),
@NamedQuery(name = «Login.findById», query = «SELECT l FROM Login l WHERE l.id = :id»),
@NamedQuery(name = «Login.findByLoGin», query = «SELECT l FROM Login l WHERE l.loGin = :loGin»),
@NamedQuery(name = «Login.findByPasSword», query = «SELECT l FROM Login l WHERE l.pasSword = :pasSword»),
@NamedQuery(name = «Login.findByEstado», query = «SELECT l FROM Login l WHERE l.estado = :estado»)})
public class Login implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = «id»)
private Integer id;
@Size(max = 255)
@Column(name = «loGin»)
private String loGin;
@Size(max = 40)
@Column(name = «pasSword»)
private String pasSword;
@Column(name = «estado»)
private Boolean estado;

public Login() {
}

public Login(Integer id) {
this.id = id;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getLoGin() {
return loGin;
}

public void setLoGin(String loGin) {
this.loGin = loGin;
}

public String getPasSword() {
return pasSword;
}

public void setPasSword(String pasSword) {
this.pasSword = pasSword;
}

public Boolean getEstado() {
return estado;
}

public void setEstado(Boolean estado) {
this.estado = estado;
}

@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning – this method won’t work in the case the id fields are not set
if (!(object instanceof Login)) {
return false;
}
Login other = (Login) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return «com.entity.Login[ id=» + id + » ]»;
}

}

[/cc]

[cc lang=»java»]

[/cc]

por ultimo el Home que no es más que una página con un mensaje de bienvenida
[cc lang=»html»]
< ?xml version="1.0" encoding="UTF-8"?>

< !DOCTYPE html>


TODO supply a title


TODO Bienvenido



[/cc]
Así mismo si estas en tus primeros pasos también puedes pasarte por este vídeo donde podrás ver como poner en marcha el servidor glassfish para hacer el despliegue de tus aplicaciones.
Hasta pronto!.

9 comentario en “Login JSF + PrimeFaces + JPA + MYSQL”
  1. Gracias buscaba un texto concreto del tema y me permitirá aprender en unos cuantos minutos lo que en vídeos explican en una hora

  2. por cierto es una mala experiencia de usuario que te obligue a loguearte y confirmar correo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

×