Sei sulla pagina 1di 7

LOGIN UTILIZANDO MD5, Servlet y JSP

YANETH MEJIA RENDON


<form action="/ConectaBD/login" method="post">
Nombre de Usuario:<input type="Text" name="nombre" size="20"><br />
Contrasea: <input type="Password" name="pass" onkeyup="this.form.hash.value =
MD5(this.form.pass.value)"><br />
MD5 Generado: <input type="text" name="hash"
value="" style="width: 336px;" /><br />
<input type="submit" name="envio" value="Enviar">

</form>
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:

<script type="text/javascript" src="MD5.js"></script>

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.*;

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:

<%@page session="true" %>


<%String nombres = (String)session.getAttribute("nombre");
String apellidos = (String)session.getAttribute("ape");%>

Luego las escribimos:

<body>
<h2>Tenemos las variables de sesin, que guardamos en el servlet</h2>
<%=nombres%><br/>
<%=apellidos%>
</body>

VALIDACION DE CADENAS DE TEXTO, E-MAIL, URL Y COMENTARIOS


<form class="cmxform" id="commentForm" method="get" action="">
<fieldset>
<legend>Please provide your name, email address (won't be published) and a comment</legend>
<p>
<label for="cname">Name (required, at least 2 characters)</label>
<input id="cname" name="name" minlength="2" type="text" required/>
</p>
<p>
<label for="cemail">E-Mail (required)</label>
<input id="cemail" type="email" name="email" required/>
</p>
<p>
<label for="curl">URL (optional)</label>
<input id="curl" type="url" name="url"/>
</p>
<p>
<label for="ccomment">Your comment (required)</label>
<textarea id="ccomment" name="comment" required></textarea>
</p>
<p>
<input class="submit" type="submit" value="Submit"/>
</p>
</fieldset>
</form>
<script>
$("#commentForm").validate();
</script>

Potrebbero piacerti anche