Session TimeOut en JSF2 con el soporte de Primefaces.
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Implementanto la solución con Primefaces.
- 4. Referencias.
- 5. Conclusiones.
1. Introducción
Ya hemos visto en adictos como llevar a cabo el control de timeout de la sesión con otras librerías de componentes visuales JSF:
- Configuración de la desconexión de usuarios con ICEFaces
- Session TimeOut en RichFaces, con el soporte de Jboss Seam.
Ahora es el turno de Primefaces,
en el entorno de JSF2.
En este tutorial vamos a ver como controlar la perdida de sesión del lado del cliente con el soporte de un componente de Primefaces,
para informar de la misma de una manera visualmente atractiva.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 17′ (2.93 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.7
- JSF 2.
- PrimeFaces 2.2.1
- Eclipse 3.6: Helios, con m2eclipse.
- Maven 3.0.3.
- Apache Tomcat 7.0.6 con la jdk 1.6.
3. Implementanto la solución con Primefaces.
Nuestro objetivo es informar al cliente que se ha perdido la sesión con el servidor y para ello vamos a hacer uso de un componente que básicamente es
un monitor de inactividad del cliente.
Cuando el cliente permanezca inactivo un periodo de tiempo predeterminado mostraremos una ventana modal con una redirección a la página de login.
Lo que haremos es hacer coincidir la configuración de este monitor en el cliente con la configuración de la sesión establecida en el descriptor de
despliegue de la aplicación web, con ello el tiempo de timeout estará establecido en un único lugar.
Vamos a crear una plantilla, sessionTimeOut.xhtml, que podremos incluir en cualquiera de nuestros layouts con el siguiente código:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:f="http://java.sun.com/jsf/core"> <ui:composition> <p:idleMonitor onactive="sessionTimeOutDialog.show();" timeout="#{session.maxInactiveInterval * 1000}" /> <p:dialog header="#{msg['error.sessionTimeOut.header']}" widgetVar="sessionTimeOutDialog" modal="true" fixedCenter="true" closable="false" width="400" visible="false"> <h:outputText value="#{msg['error.sessionTimeOut.text']}" /> <input id="confirmBackToLogin" type="button" value="#{msg['error.sessionTimeOut.button']}" onclick="window.location='#{facesContext.externalContext.requestContextPath}/login.xhtml';" /> </p:dialog> </ui:composition> </html>
El componente p:idleMonitor está configuración con el session timeout establecido en la aplicación y, al transcurrir dicho tiempo mostrará una ventana modal, con el evento onactive.
El atributo widgetVar de Primefaces sirve para darle un nombre al componente en el ámbito del cliente y poder invocar a funciones javascript de su api, por ejemplo, mostrarlo u ocultarlo.
El resultado, transcurrido el tiempo definido, será similar al siguiente:
4. Referencias.
5. Conclusiones.
Simple, pero necesario.
Este tutorial surge a petición de un alumno de uno de nuestros cursos de JSF2. Como sabéis en Autentia
nos dedicamos al desarrollo, consultoría, coaching y formación y, en esta última faceta siempre estamos dispuestos a echar una mano a quien confía en
nosotros para la impartición de los cursos sobre las tecnologías con las que trabajamos habitualmente.
Un saludo.
Jose
Mis felicitaciones por el tutorial, gracias a Uds. me estoy metiendo en el tema de Primefaces. Ya que estamos te quería pedir si pueden hacer un tutorial sobre Spring Security 3 con Dao y Primefaces. Creo que sería un muy buen complemento de este mismo tutorial.Un Abrazo
Hola que tal estoy trabajando en una aplicación muy parecida a MercadoLibre es un trabajo de la Universidad, me gustaria saber si me podrias ayudar con lo siguiente, como hago un Upload con Primefaces. Estoy trabajando con Eclipse Helios 3.6, con Maven 3.0 como servidor web uso Tomcat 7.0v
Buenas,
Muchas gracias por los comentarios.
Iremos atendiendo todas estas peeticiones de tutoriales poco a poco.
Stay tuned!
Un saludo.
Jose.
Estimado, gracias por el tutorial, pero al parecer tiene un problema ya que cuando se mueve el mouse se resetea el contador de p:idleMonitor, esto sería grave ya que en el servidor la sesión podría expirar mientras en el cliente la cuenta regresiva se resetearía cada vez que se mueva el mouse (el servidor no tiene idea si el usuario movió el mouse).
Esto se lo comento porque hice la prueba y efectivamente, la cuenta empezaba cada vez que movía el mouse.
Saludos cordiales.
Hola, encuentro excelente la pagina, tengo una duda, es donde debo implementar el código
soy nuevo en primefaces y no conozco mucho del tema :/