Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/07/2011, 14:00
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: [Aporte] Registro y Login de usuarios con JSP,SERVLETS,MySQL

En el Servlet anterior estamos viendo el funcionamento de una Expresión Regular para verificar que una dirección de email sea correcta, tambien surgió la necesidad de verificar que no existan espacios o caracteres especiales en el nombre de usuario y en la contraseña. Para esto podemos hacer uso de otra Expresion Regular, pero como aprendices de programación haremos las cosas por el modo mas largo, asi que crearemos un método para realizar ésta verificacion

He creado un paquete llamado "clases" y dentro de el una Javaclase llamada "Validador.java" que contiene al método isUsernameOrPasswordValid

Código java:
Ver original
  1. public boolean isUsernameOrPasswordValid(String $cadena) {
  2.         char[] cadena = $cadena.toLowerCase().toCharArray();
  3.  
  4.         //Compruebo la longitud
  5.         if (cadena.length <= 6) {
  6.             return false;
  7.         }
  8.         for (int i = 0; i < cadena.length; i++) {
  9.             //Compruebo que no existan caracteres especiales (solamento los que podrian ser usados para una inyeccion SQL o perjudicar en la consulta);
  10.             if (cadena[i] == ' '
  11.                     || cadena[i] == '='
  12.                     || cadena[i] == '?'
  13.                     || cadena[i] == '+'
  14.                     || cadena[i] == '*'
  15.                     || cadena[i] == '-'
  16.                     || cadena[i] == '%'
  17.                     || cadena[i] == '/'
  18.                     || cadena[i] == '.'
  19.                     || cadena[i] == ','
  20.                     || cadena[i] == ';'
  21.                     || cadena[i] == '!'
  22.                     || cadena[i] == '<'
  23.                     || cadena[i] == '>'
  24.                     || cadena[i] == ':') {
  25.                 return false;
  26.             }
  27.  
  28.         }
  29.         return true;
  30.     }


servlet Login.java
Código java:
Ver original
  1. package servlets;
  2.  
  3. import beans.DaoUser;
  4. import clases.Validador;
  5. import java.io.IOException;
  6. import java.util.regex.*;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.http.HttpSession;
  12.  
  13. public class Login extends HttpServlet {
  14.  
  15.     @Override
  16.     protected void doGet(HttpServletRequest request, HttpServletResponse response)
  17.             throws ServletException, IOException {
  18.         /* En este proyecto; este servlet no recibe ni debe recibir nada por GET,
  19.          * asi que si se lleva a entrar al servelt
  20.          * usando el metodo GET solamente redireccion al index.jsp
  21.          */
  22.         response.sendRedirect("index.jsp");
  23.     }
  24.  
  25.     @Override
  26.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  27.             throws ServletException, IOException {
  28.         HttpSession respuesta = request.getSession(true);
  29.         String email = request.getParameter("email");
  30.         String password = request.getParameter("password");
  31.         Pattern p = Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+([a-zA-Z]{2,9}.)+[a-zA-Z]{2,3})$");
  32.         Matcher m = p.matcher(email);
  33.         Validador v = new Validador();
  34.         DaoUser d = new DaoUser();
  35.        
  36.         //campos vacios
  37.         if (email.isEmpty() || password.isEmpty()) {
  38.             respuesta.setAttribute("error", "Hay campos vacios");
  39.  
  40.         } else {
  41.             //No hay campos vacios, veo que la direccion de email sea válida
  42.             if (m.find()) {
  43.                 respuesta.setAttribute("error", "La direccion de email no es correcta");
  44.  
  45.             } else {
  46.                 //La direccion de email si es correcta, verifico que la contraseña tambien lo sea
  47.                 if (v.isUsernameOrPasswordValid(password)) {
  48.                         try {
  49.                             d.conectar();
  50.                             if (d.isAcountExists(email, password)) {
  51.                                 //Significa que la cuenta si existe
  52.                                 //OBTENGO EL NOMBRE DEL USUARIO Y LO GUARDO EN UNA SESION
  53.                                 String NombreUsuario = d.getNameByEmail(email);
  54.                                 respuesta.setAttribute("sessionNombre", NombreUsuario);
  55.                                 respuesta.setAttribute("sessionEmail", email);
  56.                                
  57.                             } else {
  58.                                 respuesta.setAttribute("error", "Esta direccion de correo ya fue registrada");
  59.                             }
  60.  
  61.                             d.desconectar();
  62.  
  63.                         } catch (Exception e) {}
  64.  
  65.  
  66.                    
  67.  
  68.                 } else {
  69.                     respuesta.setAttribute("error", "Contraseña no es válida");
  70.  
  71.                 }
  72.  
  73.  
  74.             }
  75.         }
  76.  
  77.         response.sendRedirect("login.jsp");
  78.  
  79.     }
  80. }

Por último falta crear el archivo que invalida las sesiones útil para (Cerrar Sesion), en nuestro ejemplo será un servlet


Logout.java
Código java:
Ver original
  1. package servlets;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.http.HttpSession;
  10.  
  11. public class Logout extends HttpServlet {
  12.  
  13.     //Ya sea que el método sea por GET o POST, cerraremos la sesion.
  14.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  15.             throws ServletException, IOException {
  16.         response.setContentType("text/html;charset=UTF-8");
  17.         PrintWriter out = response.getWriter();
  18.         HttpSession sesion = request.getSession(true);
  19.        
  20.         //Cerrar sesion
  21.         sesion.invalidate();
  22.        
  23.         //Redirecciono a index.jsp
  24.         response.sendRedirect("index.jsp");
  25.     }
  26.  
  27.     @Override
  28.     protected void doGet(HttpServletRequest request, HttpServletResponse response)
  29.             throws ServletException, IOException {
  30.         processRequest(request, response);
  31.     }
  32.  
  33.     @Override
  34.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  35.             throws ServletException, IOException {
  36.         processRequest(request, response);
  37.     }
  38. }

------------------------------------------------------------------------------------------------------------------------------------------------------------------

Conclusión. Hemos visto que la programación esta separada por capas.

* La capas de presentacion son los archivos JSP, no tienen código Java explicito si no que usan Expression Language.
* Las capas de control son los servlets.
* Las capas de datos son los beans (Archivos que nosotros llamamos Dao). Dao son las siglas de Data Access Object de ahi el nombre.

En una programación orientada a objetos, el orden en el que programemos dará como resultado el tiempo en que lo programemos.

RECOMENDACIÓN: Por eso es que siempre es recomendable plantear el problema antes de comenzar a codificar usando lapiz y papel para identificar los objetos/clases y sus métodos.

Por ello, una de las cosas que en éste tutorial hicimos al comienzo fue crear todos los métodos necesarios.

Espero que a más de uno les sirva este material.
Les mando un saludo.

Éxitos.
---------------------------------------------------------------------------------------------
Descarga el Proyecto completo + archivo SQL: http://www.megaupload.com/?d=ZVW8BMEH
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.