Browse Source

Funciones EndPoint y token

master
Samuel Gamez 6 months ago
parent
commit
feb8d1a4f8
  1. 32
      ProyectoInventario-ejb/src/java/xforce/bl/LoginBL.java
  2. 11
      ProyectoInventario-ejb/src/java/xforce/bl/PaisesBL.java
  3. 1
      ProyectoInventario-ejb/src/java/xforce/bl/UsuariosBL.java
  4. 53
      ProyectoInventario-ejb/src/java/xforce/dao/LoginDAO.java
  5. 1
      ProyectoInventario-ejb/src/java/xforce/dao/UsuariosDAO.java
  6. 21
      ProyectoInventario-ejb/src/java/xforce/modelo/Usuarios.java
  7. 26
      ProyectoInventario-ejb/src/java/xforce/token/TokenGenerator.java
  8. 155
      ProyectoInventario-war/src/java/xforce/servicios/PaisesEndpoint.java
  9. 4
      ProyectoInventario-war/src/java/xforce/vista/DemoBeanUsuarios.java

32
ProyectoInventario-ejb/src/java/xforce/bl/LoginBL.java

@ -12,6 +12,7 @@ import javax.persistence.NoResultException;
import xforce.dao.LoginDAO; import xforce.dao.LoginDAO;
import xforce.modelo.Usuarios; import xforce.modelo.Usuarios;
import xforce.msg.Mensaje; import xforce.msg.Mensaje;
import xforce.token.TokenGenerator;
/** /**
* *
@ -45,6 +46,22 @@ public class LoginBL implements LoginBLLocal {
m = Mensaje.SIN_ERROR; m = Mensaje.SIN_ERROR;
rol(usuarios); rol(usuarios);
System.out.println(m); System.out.println(m);
Usuarios users = loginDAO.buscarElId(usuarios);
if (users.getToken().equals("0") || users.getToken() == null) {
String token;
Optional<Usuarios> loginToken;
do {
token = TokenGenerator.generateToken();
users.setToken(token);
loginToken = loginDAO.token(users);
} while (loginToken.isPresent());
loginDAO.editar(users);
System.out.println("Token generado: " + token);
}
} else { } else {
m = Mensaje.NO_EXISTE; m = Mensaje.NO_EXISTE;
rol(usuarios); rol(usuarios);
@ -53,6 +70,21 @@ public class LoginBL implements LoginBLLocal {
return m; return m;
} }
public Mensaje permiso(Usuarios usuarios){
Mensaje m;
LoginDAO loginDAO = new LoginDAO();
Optional<Usuarios> loginOptional = loginDAO.token(usuarios);
if(loginOptional.isPresent()){
m = Mensaje.SIN_ERROR;
} else {
m = Mensaje.NO_EXISTE;
}
return m;
}
@Override @Override
public String rol(Usuarios usuarios) { public String rol(Usuarios usuarios) {
LoginDAO loginDAO = new LoginDAO(); LoginDAO loginDAO = new LoginDAO();

11
ProyectoInventario-ejb/src/java/xforce/bl/PaisesBL.java

@ -205,8 +205,13 @@ public class PaisesBL implements PaisesBLLocal {
} }
public void addMessage(FacesMessage.Severity severity, String summary, String detail) { public void addMessage(FacesMessage.Severity severity, String summary, String detail) {
FacesContext.getCurrentInstance(). /////////////////////////////////////////////////////////////////////////////////////
addMessage("mensajePaises", new FacesMessage(severity, summary, detail)); ///////////////////////// AGREGAR EL TRY-CATCH EN SU CLASE //////////////////////////
} try {
FacesContext.getCurrentInstance().
addMessage("mensajePaises", new FacesMessage(severity, summary, detail));
} catch (NullPointerException e) {
}
}
} }

1
ProyectoInventario-ejb/src/java/xforce/bl/UsuariosBL.java

@ -230,6 +230,7 @@ public class UsuariosBL implements UsuariosBLLocal {
users.setDomicilio(usuarios.getDomicilio()); users.setDomicilio(usuarios.getDomicilio());
users.setRolesId(usuarios.getRolesId()); users.setRolesId(usuarios.getRolesId());
users.setEstadosId(usuarios.getEstadosId()); users.setEstadosId(usuarios.getEstadosId());
users.setToken(users.getToken());
// Guardar la modificación en la base de datos // Guardar la modificación en la base de datos
if (p.editar(users)) { if (p.editar(users)) {

53
ProyectoInventario-ejb/src/java/xforce/dao/LoginDAO.java

@ -8,6 +8,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence; import javax.persistence.Persistence;
import javax.persistence.Query; import javax.persistence.Query;
import xforce.modelo.Usuarios; import xforce.modelo.Usuarios;
@ -51,6 +52,33 @@ public class LoginDAO {
} }
} }
public Optional<Usuarios> token(Usuarios usuarios) {
Query q1 = em.createNamedQuery("Usuarios.findByToken");
q1.setParameter("token", usuarios.getToken());
List<Usuarios> resToken = q1.getResultList();
if (!resToken.isEmpty()) {
Usuarios tokenEncontrado = resToken.stream()
.findFirst()
.orElse(null);
return Optional.ofNullable(tokenEncontrado);
} else {
return Optional.empty();
}
}
public String tokenEnd(String token) {
try {
Query q = em.createQuery("SELECT u.token FROM Usuarios u WHERE u.token = :token");
q.setParameter("token", token);
return (String) q.getSingleResult();
} catch (NoResultException e) {
System.out.println("No token found for: " + token);
return null; // O lanza una excepción específica si prefieres manejarlo de esa manera
}
}
public String rol(Usuarios usuarios) { public String rol(Usuarios usuarios) {
Query q = em.createQuery("SELECT u.rolesId.rol FROM Usuarios u WHERE u.nombre = :nombre AND u.contrasenia = :contrasenia AND u.estado = :estado"); Query q = em.createQuery("SELECT u.rolesId.rol FROM Usuarios u WHERE u.nombre = :nombre AND u.contrasenia = :contrasenia AND u.estado = :estado");
@ -61,4 +89,29 @@ public class LoginDAO {
return (String) q.getSingleResult(); return (String) q.getSingleResult();
} }
public Usuarios buscarElId(Usuarios usuarios) {
Query q = em.createQuery("SELECT u FROM Usuarios u WHERE u.nombre = :nombre AND u.contrasenia = :contrasenia AND u.estado = :estado");
q.setParameter("nombre", usuarios.getNombre());
q.setParameter("contrasenia", usuarios.getContrasenia());
q.setParameter("estado", usuarios.getEstado());
List<Usuarios> resultList = q.getResultList();
if (!resultList.isEmpty()) {
return resultList.get(0);
} else {
return null; // o lanza una excepción si es necesario
}
}
public boolean editar(Usuarios usuarios) {
if (buscarElId(usuarios) == null) {
return false;
} else {
em.getTransaction().begin();
em.merge(usuarios);//edita en la base de datos
em.getTransaction().commit();
return true;
}
}
} }

1
ProyectoInventario-ejb/src/java/xforce/dao/UsuariosDAO.java

@ -28,6 +28,7 @@ public class UsuariosDAO {
public void agregar(Usuarios a) { public void agregar(Usuarios a) {
em.getTransaction().begin(); em.getTransaction().begin();
a.setEstado(2); a.setEstado(2);
a.setToken("0");
em.persist(a);//almacena en la base de datos em.persist(a);//almacena en la base de datos
em.getTransaction().commit(); em.getTransaction().commit();
} }

21
ProyectoInventario-ejb/src/java/xforce/modelo/Usuarios.java

@ -22,7 +22,7 @@ import javax.xml.bind.annotation.XmlRootElement;
/** /**
* *
* @author hugoa * @author Samuel Gamez
*/ */
@Entity @Entity
@Table(name = "usuarios", catalog = "inventarioalmacen", schema = "") @Table(name = "usuarios", catalog = "inventarioalmacen", schema = "")
@ -36,7 +36,8 @@ import javax.xml.bind.annotation.XmlRootElement;
@NamedQuery(name = "Usuarios.findByTelefono", query = "SELECT u FROM Usuarios u WHERE u.telefono = :telefono"), @NamedQuery(name = "Usuarios.findByTelefono", query = "SELECT u FROM Usuarios u WHERE u.telefono = :telefono"),
@NamedQuery(name = "Usuarios.findByEstado", query = "SELECT u FROM Usuarios u WHERE u.estado = :estado"), @NamedQuery(name = "Usuarios.findByEstado", query = "SELECT u FROM Usuarios u WHERE u.estado = :estado"),
@NamedQuery(name = "Usuarios.findByContrasenia", query = "SELECT u FROM Usuarios u WHERE u.contrasenia = :contrasenia"), @NamedQuery(name = "Usuarios.findByContrasenia", query = "SELECT u FROM Usuarios u WHERE u.contrasenia = :contrasenia"),
@NamedQuery(name = "Usuarios.findByDomicilio", query = "SELECT u FROM Usuarios u WHERE u.domicilio = :domicilio")}) @NamedQuery(name = "Usuarios.findByDomicilio", query = "SELECT u FROM Usuarios u WHERE u.domicilio = :domicilio"),
@NamedQuery(name = "Usuarios.findByToken", query = "SELECT u FROM Usuarios u WHERE u.token = :token")})
public class Usuarios implements Serializable { public class Usuarios implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -80,6 +81,11 @@ public class Usuarios implements Serializable {
@Size(min = 1, max = 100) @Size(min = 1, max = 100)
@Column(name = "domicilio") @Column(name = "domicilio")
private String domicilio; private String domicilio;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 88)
@Column(name = "token")
private String token;
@JoinColumn(name = "estados_id", referencedColumnName = "id") @JoinColumn(name = "estados_id", referencedColumnName = "id")
@ManyToOne(optional = false) @ManyToOne(optional = false)
private Estados estadosId; private Estados estadosId;
@ -94,7 +100,7 @@ public class Usuarios implements Serializable {
this.id = id; this.id = id;
} }
public Usuarios(Integer id, String nombre, String apellidoPaterno, String email, String telefono, int estado, String contrasenia, String domicilio) { public Usuarios(Integer id, String nombre, String apellidoPaterno, String email, String telefono, int estado, String contrasenia, String domicilio, String token) {
this.id = id; this.id = id;
this.nombre = nombre; this.nombre = nombre;
this.apellidoPaterno = apellidoPaterno; this.apellidoPaterno = apellidoPaterno;
@ -103,6 +109,7 @@ public class Usuarios implements Serializable {
this.estado = estado; this.estado = estado;
this.contrasenia = contrasenia; this.contrasenia = contrasenia;
this.domicilio = domicilio; this.domicilio = domicilio;
this.token = token;
} }
public Integer getId() { public Integer getId() {
@ -169,6 +176,14 @@ public class Usuarios implements Serializable {
this.domicilio = domicilio; this.domicilio = domicilio;
} }
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Estados getEstadosId() { public Estados getEstadosId() {
return estadosId; return estadosId;
} }

26
ProyectoInventario-ejb/src/java/xforce/token/TokenGenerator.java

@ -0,0 +1,26 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package xforce.token;
import java.security.SecureRandom;
/**
*
* @author Samuel Gamez
*/
public class TokenGenerator {
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
private static final int TOKEN_LENGTH = 88;
private static final SecureRandom secureRandom = new SecureRandom();
public static String generateToken() {
StringBuilder token = new StringBuilder(TOKEN_LENGTH);
for (int i = 0; i < TOKEN_LENGTH; i++) {
token.append(CHARACTERS.charAt(secureRandom.nextInt(CHARACTERS.length())));
}
return token.toString();
}
}

155
ProyectoInventario-war/src/java/xforce/servicios/PaisesEndpoint.java

@ -0,0 +1,155 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template
*/
package xforce.servicios;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xforce.bl.PaisesBLLocal;
import xforce.dao.LoginDAO;
import xforce.modelo.Paises;
import xforce.modelo.Usuarios;
import xforce.msg.Mensaje;
/**
*
* @author Samuel Gamez
*/
@WebServlet(name = "PaisesEndpoint", urlPatterns = {"/PaisesEndpoint"})
public class PaisesEndpoint extends HttpServlet {
@EJB
private PaisesBLLocal paisesBL;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
// Obtener el token de la solicitud
String token = request.getParameter("token");
// Verificar si el token es válido
LoginDAO loginDAO = new LoginDAO();
Usuarios usuario = new Usuarios();
usuario.setToken(token);
String s = loginDAO.tokenEnd(token);
System.out.println(s);
if (s == null) {
// Token no válido
out.println("<h1>Token no valido</h1>");
//response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token no válido");
List<Paises> listaPaises = paisesBL.buscarValidos(true);
if (listaPaises != null && !listaPaises.isEmpty()) {
for (Paises pais : listaPaises) {
out.println("<p>" + pais.getNombre() + "</p>");
}
}
return;
}
Paises paises = new Paises();
String opc = request.getParameter("opc");
String id = request.getParameter("id");
String nombre = request.getParameter("nombre");
Mensaje m = null;
if (opc != null) {
switch (Integer.parseInt(opc)) {
case 1:
paises.setNombre(nombre);
m = paisesBL.agregar(paises);
break;
case 2:
paises.setId(Integer.valueOf(id));
paises.setNombre(nombre);
m = paisesBL.editar(paises);
break;
case 3:
paises.setId(Integer.valueOf(id));
m = paisesBL.eliminar(paises);
break;
default:
throw new AssertionError();
}
}
List<Paises> listaPaises = paisesBL.buscarValidos(true);
out.print("<h1>" + m + "</h1>");
if (listaPaises != null && !listaPaises.isEmpty()) {
for (Paises pais : listaPaises) {
out.println("<p>" + pais.getNombre() + "</p>");
}
}
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}

4
ProyectoInventario-war/src/java/xforce/vista/DemoBeanUsuarios.java

@ -46,9 +46,9 @@ public class DemoBeanUsuarios implements Serializable {
public String agregar() { public String agregar() {
Estados estao = new Estados(); Estados estao = new Estados();
estao.setId(3); estao.setId(3);
usuario.setEstadosId(estao); usuario.setEstadosId(estao);
Mensaje mensaje = usuariosBL.agregar(usuario); Mensaje mensaje = usuariosBL.agregar(usuario);
switch (mensaje) { switch (mensaje) {

Loading…
Cancel
Save