Está en la página 1de 6

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

SEGURIDAD DECLARATIVA
La autenticacin y autorizacin se realiza a travs del Java Authenticationand AuthorizationService (JAAS). Defino un Security Realm de tipo file en la consola de administracin de Glassfish para establecer la coleccin de usuarios que va a usar la aplicacin (usuario y admin) con sus contraseas de acceso. Una vez que hemos definido el File Realm, configuro la aplicacin a travs de los descriptores web.xml y sun-web.xml. En sun-web.xml defino los rol Administrador y "Usuario" , al primero le asocio el usuario admin y al segundo el usuario usuario de la forma. <security-role-mapping> <role-name>Administrador</role-name> <principal-name>admin</principal-name> </security-role-mapping> <security-role-mapping> <role-name>Usuario</role-name> <principal-name>usuario</principal-name> </security-role-mapping>

En web.xml defino los recursos a los que se accede y que roles (Administrador y "Usuario" definidos tambin en sun-web.xml) pueden usar esos recursos. Los roles Usuario y Administrador pueden fichar, por lo que se les permite acceder a todas las pginas situadas en el directorio /seguro_fichaje/ de la aplicacin. Solo el rol Administrador puede realizar las consultas por fecha y usuario, por lo que solo a los usuarios autenticados asociados a este rol se les permite acceder a las pginas situadas en el directorio /seguro_admin/ de la aplicacin.

<security-role> <description>Administrador</description> <role-name>Administrador</role-name> </security-role> <security-role> <description>Usuario</description> <role-name>Usuario</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>Fichar</web-resource-name> <description>Los roles Usuario y Administrador pueden fichar. </description>

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

<url-pattern>/seguro_fichaje/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>Administrador</role-name> <role-name>Usuario</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Administracin</web-resource-name> <description>Solo el rol Administrador puede realizar las consultas. </description> <url-pattern>/seguro_admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>Administrador</role-name> </auth-constraint> <user-data-constraint> <description/> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint>

Tambien defino que modo de autenticacion usaremos en nuestro caso, es de tipo Form (autenticacin basada en formularios) usando la pagina login.jsf como pgina de login y login-error.jsf como la pgina que aparecer tras un error en el login. <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsf</form-login-page> <form-error-page>/login-error.jsf</form-error-page> </form-login-config> </login-config>

Adems el Formulario de logn definido en el fichero login.xhtml :


tiene un action concreto (j_security_check), para que se invoque al filtro de autorizacin de JAAS, el nombre del campo de entrada para el login de usuario se llama j_username y el campo password j_password.

Tambin defino la pgina alternativa que el servidor muestra cuando trata de enviar el cdigo de estado HTTP 403 ( cuando el servidor no permite el acceso a una pgina determinada por ejemplo porque el usuario no tiene autorizacin).

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

<error-page> <error-code>403</error-code> <location>/seguro_fichaje/SinResultados.jsf</location> </error-page>

PLANTILLA Y NAVEGACIN
Todas las pginas de la aplicacin utilizan la plantilla plantilla.xhtml que define la estructura de estas pginas en 4 secciones: La cabecera de pgina Que es comn a todas aunque para cada pgina se muestra una pequea descripcin de la misma. El men Que es comn a todas las pginas. Esta confeccionado con etiquetas h:commandLink y el argumento action de cada una de estas etiquetas se utiliza en combinacin con el descriptor faces-config.xml para definir la navegacin entre pginas en funcin de la opcin del men que el usuario elija.
<div id="menu"> <ul> <li><h:commandLink value="Fichar" action="Fichar" /></li> <li><h:commandLink value="Consulta por usuario" action="Consulta_usuario" /></li> <li><h:commandLink value="Consulta por fechas" action="Consulta_fechas" /></li> <li><h:commandLink value="Salir" action="Salir" /></li> </ul> </div>

La parte de contenidos de la pgina. Es diferente para cada una de las pginas y donde se muestran los datos de fichaje en la pantalla de fichaje y los listados en las pginas de bsqueda por usuario y bsqueda por fechas. El pi de pagina. Que es comn a todas las pginas

DESCRIPCIN DE LAS PANTALLAS


Fichar.xhtml En la parte de contenidos de la pgina muestra un botn que cuando se pulsa llama al mtodo fichar() del managed bean mbeanPrincipal que se encarga de mostrar los datos del fichaje en pantalla (Este mtodo en la aplicacin real se encargara tambin de fichar los datos en la base de datos).

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

<h:commandButton id="boton" value="Fichar" action="#{mbeanPrincipal.fichar()}" type="submit"/>

BuscarPorUsuario.xhtml A esta pgina solo puede acceder el rol Administrador si un usuario que no pertenece a ese rol intenta acceder, el servidor le deniega el acceso y genera el cdigo de estado HTTP 403 con lo que se muestra la pgina SinResultados.xhtml en su lugar. En la parte de contenidos de la pgina solicita un nombre de usuario, y utiliza el managed bean mbeanBuscador para almacenarlo y para validar que tenga entre 3 y 10 caracteres. <h:outputLabel for="nombre" value="Usuario: " /> <h:inputText id="nombre" value="#{mbeanBuscador.usuario}" maxlength="10" validator="#{mbeanBuscador.validaUsuario}" />

Tambin muestra un botn que cuando se pulsa se ejecuta la regla de navegacin correspondiente definida en faces-config.xml de forma que pasa a mostrarse la pgina Resultados.xhtml <h:commandButton value="Enviar" action="conResultados" type="submit"/>

BuscarPorFecha.xhtml A esta pgina solo puede acceder el rol Administrador si un usuario que no pertenece a ese rol intenta acceder, el servidor le deniega el acceso y genera el cdigo de estado HTTP 403 con lo que se muestra la pgina SinResultados.xhtml en su lugar. En la parte de contenidos de la pgina solicita un nombre de usuario, y utiliza el managed bean mbeanBuscador para almacenarlo y para validar que las fechas no estn en blanco y que tengan el formato dd-MM-yyyy. <h:outputLabel for="fecha1" value="Fecha inicial:" /> <h:inputText id="fecha1" value="#{mbeanBuscador.fInicio}" validator="#{mbeanBuscador.validaFecha}"/> <h:outputLabel for="fecha2" value="Fecha final:" /> <h:inputText id="fecha2" value="#{mbeanBuscador.fFin}" validator="#{mbeanBuscador.validaFecha}"/> Tambin muestra un botn que cuando se pulsa se ejecuta la regla de navegacin correspondiente definida en faces-config.xml de forma que pasa a

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

mostrarse la pgina Resultados.xhtml despus de llamar al mtodo "#{mbeanBuscador.sinNombre()}. Este metodo valida que la fecha inicial sea menor que la fecha final y carga en el parmetro de entrada usuario el valor "*" para formatear la salida de la pantalla Resultados.xhtml. <h:commandButton value="Enviar" action="conResultados" actionListener="#{mbeanBuscador.sinNombre()}" type="submit"/>

Resultados.xhtml Esta pantalla muestra una tabla de datos ficticios y constantes que representan los resultados de las bsquedas por usuario y por fechas. La tabla que se muestra es la misma para los dos tipos de bsquedas, pero para las bsquedas por usuario no se muestra la columna Usuario en la tabla.

Utilizo la etiqueta JTSL <c:if> para comprobar que el valor de la propiedad usuario del managed bean mbeanBuscador tiene el valor * si es as muestra la columna usuario de la tabla y en caso contrario no lo hace puesto que se trata de una bsqueda por usuario. Utilizo una nueva estructura de datos a la que llamo FichajeDetalle con un formato parecido a de las tablas que se muestran en esta pantalla. FichajeDetalle almacena los datos de dos fichajes consecutivos para un usuario en el mismo da, el de ENTRADA y el de SALIDA . La estructura de FichajeDetalle es la que sigue: private String usuario; private String dia; private String entrada; private String salida En el caso de que haya un error de fichaje en el campo entrada o en el campo salida se almacena - con lo que el estilo que se aplica a la fila correspondiente de la tabla que se muestra en pantalla es funcin de que en esos campos haya almacenado - o no.

SinResultados.xhtml Esta pantalla se muestra cuando el servidor le deniega el acceso a un usuario a un recurso (porque su rol no es administrador) y genera el cdigo de estado HTTP 403. Tambin se muestra cuando las bsquedas por usuario y por fechas no producen resultados.

MEMORIA DE LA PRCTICA PROTOTIPO

Juan Jos Fernndez Prez

Dependiendo de que sea uno u otro caso muestra el mensaje "NO AUTORIZADO, SOLO LOS ADMINISTRADORES PUEDEN EFECTUAR BSQUEDAS", o bien "NO HAY RESULTADOS PARA LA BSQUEDA . Este mensaje se calcula llamando al mtodo #{mbeanBuscador.sinResultados()} que comprueba el rol del usuario autenticado.

Bienvenido.xhtml Esta pantalla se muestra una vez que un usuario se ha autenticado con xito en el sistema, muestra el nombre del usuario y la fecha y hora actual, para ello llama a los mtodos #{mbeanPrincipal.usuario()} y #{mbeanPrincipal.usuario()} que generan esos datos. Despedida.xhtml Se muestra cuando se escoge la opcin salir en el men, muestra un mensaje de despedida y llama al mtodo logout del managed bean usuario que cierra la sesin y vuelve a pedir Usuario y Contrasea mostrando la pgina login.xhtml login.xhtml Se muestra cuando el usuario intenta autenticarse en la aplicacin. Login-error.xhtml Se muestra despus de que el usuario intent autenticarse con un login y/o contrasea no vlidos.