Seguridad y JAAS (II)

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:&nbsp;<input type="text" name="j_username"/>

<br>

Contraseña:&nbsp;<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:&nbsp;<input type="text" name="j_username"/>

Por último el campo de clave debe denominarse j_password

Contraseña:&nbsp;<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.

Related Post