Login Utilizando Md5, Servlet y Jsp
-
Upload
yaneth-mejia -
Category
Documents
-
view
124 -
download
7
description
Transcript of Login Utilizando Md5, Servlet y Jsp
-
LOGIN UTILIZANDO MD5, Servlet y JSP
YANETH MEJIA RENDON
1. Cargamos la pgina (.jsp) y pedimos el nombre de usuario, y la contrasea.
2. Usando JavaScript, encriptamos la contrasea en MD5 (es ms seguro encriptarla desde el cliente)
3. Enviamos la contrasea encriptada al Servlet, y la comparamos con la que tenemos en la BD
4. Si todo funciona como debe (previas validaciones), mostramos la pgina del admin (por ahora del
admin, luego vienen otras).
En nuestro archivo jsp, solamente tenemos esto:
El link al archivo .js para encriptar:
Se tiene en la misma carpeta.
Un form, que tiene el campo para el nombre de usuario, la pass, y uno para que vean la pass
encriptada.
Ahora, el servlet login.
Los import necesarios (adems de los que ya vienen) son:
import javax.servlet.http.*;
import java.sql.*;
Nombre de Usuario:
Contrasea:
MD5 Generado:
-
Variables de Clase:
private String nombre, pass, //En pass se guarda la que ingreso el usuario
AttNombre ="", AttAppe ="", //Para guardar los datos que nos regrese la BD
SQLEx = "", EX = ""; //Los errores que podamos tener
Empezamos con el mtodo doPost. El doGet si gustan pueden borrarlo, no lo vamos a usar.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession sesion = request.getSession(true);
this.validar(request.getParameter("nombre"), request.getParameter("hash"));
sesion.setAttribute("nombre", this.AttNombre);
sesion.setAttribute("ape", this.AttAppe);
response.sendRedirect(response.encodeRedirectURL("/ConectaBD/postLog.jsp") );
}
Lo primero que hacemos, es crear una sesin para el usuario.
Luego llamamos a la funcin validar para que valide los campos (le enviamos los datos
ingresados por el usuario). Fjense que estoy tomando el texto del input hash, porque las
contraseas las tengo encriptadas en la BD.
Despus de que validar cumpla su trabajo (que veremos ms adelante), guardamos, como
variables de sesin, el nombre y el apellido de la persona. (Nosotros ingresamos solo el nombre
de usuario.)
Por ltimo, vamos al archivo postLog.jsp.
Veamos que hace validar:
private void validar(String parNom, String parPass){
-
Boolean estado = false;
String falta = null;
if(!parNom.isEmpty()){
if(!parPass.isEmpty()){
estado = true;
this.nombre = parNom;
this.pass = parPass;
}else{ falta = "No se ingres la Contrasea";
}else{ falta = "No se ingres el Nombre de Usuario"; }
this.lectorBD(estado, falta);
}
Fijamos una variable tipo Boolean para definir el estado, y falta para guardar un mensaje.
Si parNom NO viene vaca, comprobamos que parPass NO venga vaca tampoco.
Cuando esto se cumpla, cambiamos el estado a true. En caso de que alguna de ellas est vaca,
guardamos el mensaje correspondiente.
Llamamos a la funcin lectorBD
Siguiente -> lectorBD
private void lectorBD(Boolean estado, String aviso){
if(estado){
try{
String MySQLDriver ="com.mysql.jdbc.Driver",
DriGetConn = "jdbc:mysql://127.0.0.1/proyec",
//El nombre de usuario y la contrasea para entrar a BD
-
userBD = "USUARIOBD", passBD ="CONTRASEA-DE-BD",
selectID ="SELECT id FROM usernames WHERE username ='",
IDpass ="", //El ID de la persona que se loguea
selectMD5 ="SELECT password FROM passwords WHERE id ='",
passMD5 = "", //La contrasea de la persona leida desde la BD
selectDatos ="SELECT nombre, apellido FROM dusuarios WHERE rut='";
Class.forName(MySQLDriver);
Connection conexion = DriverManager.getConnection
(DriGetConn, userBD, passBD);
Statement query = conexion.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = query.executeQuery(selectID + nombre +"'");
rs.first();
IDpass = rs.getString("id");
rs.close();
rs = query.executeQuery(selectMD5 + IDpass + "'");
rs.first();
passMD5 = rs.getString("password");
rs.close();
En esta primera parte hacemos lo siguiente:
Si estado viene como true, entramos a leer datos desde la BD.
Las variables, son para acortar cdigo simplemente.
-
Definimos el Driver para MySQL.
Despus, y como se tienen definidas las tablas, buscamos el id del username ingresado.
Con este id, buscamos la contrasea del username ingresado. Esta contrasea es la que esta
guardada en la BD.
En la segunda parte >
if(this.passMatch(passMD5)){
rs = query.executeQuery(selectDatos + IDpass +"'");
rs.first();
this.AttNombre = rs.getString(1);
this.AttAppe = rs.getString(2);
rs.close();
}
query.close(); conexion.close();
}catch(SQLException ex){
this.SQLEx = "Se produjo una excepcin durante la conexin: "+ ex.toString();
}catch(Exception ex){
this.EX = "Se produjo una excepcin: "+ ex.toString();
}
}
}
Ahora, llamamos a la funcin passMatch para comprobar que las 2 sean iguales (la que ingresamos
en el formulario, y la que lemos desde la BD). La usamos directamente en el if.
Enviamos como parmetro la contrasea leda desde la BD.
Sabemos que son iguales, por lo tanto guardamos en las variables de clase AttNombre y
AttAppe lo que obtenemos desde la BD.
Si tenemos error de SQL, captamos la Exception. Lo mismo con otros errores.
Veamos la funcin passMatch()
-
private Boolean passMatch(String passMD5){
if(this.pass.equals(passMD5)){
return true;
}else{
return false;
}
}
Comparamos el string entregado por el form, con el string de la BD
Si son iguales, retornamos un true. De lo contrario, un false
Eso es todo!
Por ltimo, el cdigo de postLog.jsp
Primero las lemos:
Luego las escribimos:
Tenemos las variables de sesin, que guardamos en el servlet
-
VALIDACION DE CADENAS DE TEXTO, E-MAIL, URL Y COMENTARIOS
Please provide your name, email address (won't be published) and a comment Name (required, at least 2 characters) E-Mail (required) URL (optional) Your comment (required) $("#commentForm").validate();