En este post nos encargaremos de la parte de Autenticación.En JEE existen varias formas de autentificarse concretamente BASIC , DIGEST,FORM y CLIENT-CERT . Cada una de las cuales tiene sus peculiaridades .
En este post nos vamos a centrar en la Autenticación de tipo FORM o via formulario que es una de las mas habituales . Para ello necesitaremos crearnos un formulario en el que el usuario introduzca nombre y clave.
Vamos a ver el código fuente del formulario
<html> <span style="font-size: 13px; line-height: 19px;"><head></span> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Pagina de Login</title> </head> <body> <form action="j_security_check" method="POST"> Usuario: <input type="text" name="j_username"/> <br> Contraseña: <input type="password" name="j_password"/> <br> <input type="submit"/> </form> </body> </html>
Como podemos ver este formulario de Autenticación tiene varias cosas peculiares que son definidas por el standard de JAAS .En primer lugar el atributo action tiene que tener el valor j_security_check
<form action="j_security_check" method="POST">
En segundo lugar el campo de usuario tiene que denominarse j_username
Usuario: <input type="text" name="j_username"/>
Por último el campo de clave debe denominarse j_password
Contraseña: <input type="password" name="j_password"/>
Realizadas estas operaciones ya tendremos el formulario correctamente construido. Una vez hecho esto damos de alta el formulario en el fichero web.xml para configurar la autenticación.
<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config>
Una vez hecho esto nos queda generar la pagina error.jsp para los casos en los que el usuario no se autentique de forma correcta.Vamos a ver su código:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=<em>"Content-Type"</em> content=<em>"text/html; charset=UTF-8"</em>> <title>Pagina de Error</title> </head> <body> No tienes permisos para acceder </body> </html>
Una vez realizada esta operación vamos a mostrar la estructura de ficheros que tenemos en la aplicación
Como podemos ver tenemos los ficheros de login.jsp y de error.jsp mas el fichero web.xml . Aparte de estos ficheros hemos creado dos carpetas recursosRoleA y recursosRoleB. Las cuales incluyen las siguientes páginas jsp.
El contenido de los ficheros HolaRoleA. jsp y HolaRoleB.jsp es muy similar y simplemente vamos a mostrar el de uno de los dos.
<%@ page language=<em>"java"</em> contentType=<em>"text/html; charset=UTF-8"</em> pageEncoding=<em>"UTF-8"</em>%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=<em>"Content-Type"</em> content=<em>"text/html; charset=UTF-8"</em>> <title>Acceso</title> </head> <body> Bienvenido RoleA </body> </html>
Una vez construidos estos ficheros hemos finalizado practicamente la configuración a nivel de JAAS .Sin embargo en el post anterior se nos olvido dar de alta los Roles a nivel general en el web.xml .
<pre><security-role> <role-name>ROLEA</role-name> </security-role> <security-role> <role-name>ROLEB</role-name> </security-role></pre>
Por ello mostramos a continuación el contenido del fichero web.xml con el código que faltaba.
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd" version="2.4"> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>ROLEA</role-name> </security-role> <security-role> <role-name>ROLEB</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>recursosRoleA</web-resource-name> <url-pattern> /recursosRoleA/* </url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>ROLEA</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>recursosRoleB</web-resource-name> <url-pattern> /recursosRoleB/* </url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>ROLEB</role-name> </auth-constraint> </security-constraint> </web-app>
La siguiente imagen resume la relación existente entre el web.xml y los distintos ficheros de la aplicación.
Aunque hemos avanzado bastante todavia nos queda asociar la configuración de JAAS a un repositorio de usuarios esto lo cubriremos en el proximo post.





Excelente me saco de un apuro, gracias!!!.
de nada 🙂
Padrisimo le entendi a todo, Gracias
gracias 🙂
Ola ingeniero, muchas gracias por tus aportes, quería saber si finalmente publicaste algún post con la información de como asociar JAAS a un repositorio de usuarios?
No creo que no tengo nada en concreto de eso publicado ya lo siento.
Ingeniero muchas gracias por publicar estos tipos de Post que de verdad sirven para aclarar bastante cosas, yo estoy realizando una aplicación donde tengo 5 tipos de Usuario (Administrador,Secretaria,Contador,Analista y agente de compra-venta), quisiera preguntarte y saber si estoy realizando lo correcto, yo cree los crud de las diferentes tablas de mi BD en el IDE Netbeans, es necesario para efectos de Autenticación y Autorización, agrupar por los diferentes tipos de roles, los archivos del crud de cada tabla ?? Gracias amigo, muchos éxitos
me alegro que te haya sido util 🙂
Cecilio, ha sido útil pero he montado una aplicación y no se como enlazarla a una clase java. Y la estructura de directorios donde tengo que declarar cada cosa no la tengo clara.
Le agradecería si me echa una mano.
Gracias.
Saludos,
javier
Uff son muchas preguntas 🙂 , se un poco más especifico