Como funciona la sesión con JSF? Duda

Hola comunidad Java.
Quisiera que alguien me dijera como se comporta la sesión con JSF o solo WEB ?
El panorama es el siguiente.
Hay una pagina la que funge como pantalla de login, el usuario introduce sus credenciales correctamente y entra a la aplicación.
después de unos 30 min SIN recibir evento alguno por parte del usuario el, y en momento en que precione cualquier botón el sistema deberá redireccionar a la pantalla de login.
Tengo un problema, NO redirecciona a la pantalla de login. Saben por que?.
Le doy click a cualquier botón y se queda hay en la pantalla, una vez que presiono F5 entonces si me redirecciona a la pantalla de login.
Ayuda por favor.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Monitorea sesión

Una sesión web crea una cookie del lado del servidor y una del lado del cliente. Cada vez que se realiza una comunicación estas cookies son leidas y dependiendo de tu configuración se valida la sesión pues la unica condición que exista sesión es que exista cookie, de ahi puedes implementar roles, privilegios y mas pero eso tiene que ver en como manejas tu la sesión.

Tu problema por la descripción que leo es que tienes unos componentes que hacen carga de información asincrona (AJAX pues). Me imagino que lo unico que tienes protegido es la página desde donde invocas consultas; MAL HECHO!

Tienes que saber que existen filtros para proteger cualquier peticion hecha al sitio entero. Veo que puedes tener un hueco de seguridad bastante fuerte. Por ejemplo supon que no pueden accesar a la página principal pero si pueden hacer peticiones a páginas que obtienen información de tu DB; entonces debes de proteger esas fuentes de consulta. La mayoria de frameworks (bueno todos los que conozco) tienen la capacidad de crear filtros por las que deben de pasar todas (segun lo configures) las peticiones que despacha tu servidor. Es ahi donde puedes bloquear el acceso cuando una sesión no existe, está caducada o ... en terminos generales, no es una sesión valida.

Pienso en dos soluiones que puedes implementar.

1 .- Crear un metodo que consulte el estado de sesión antes de ejecutar cualquier peticion al servidor. En realidad esa seria una peticion previa a un recurso que solo te regresa true|false segun el estado de la sesión. De esa forma sabras si puedes hacer o no peticiones como consultas de datos o lo que sea.
Ejemplo, si consultas : localhost:8080/session/check que se encarga de responder un JSON con una bandera indicandote el estado de la sesion, obtendrias un resultado como este

{isAlive: true}

2.- No hacer las peticiones de forma asincrona. Esta es un poco mas segura ya que no necesitas verificar la sesion manualmente, solo indicas que página se muestra en caso de no tener sesion valida

Conclusion: Para ambos casos, es importante crear filtros/interceptores que puedan bloquear el acceso no deseado a recursos de consulta de datos o cualquier recurso que pueda alterarlos o modificar el funcionamiento de tu aplicacion. Si haces AJAX usa la opcion 1, de lo contrario la 2 es la mas común.

Imagen de CuicaJavier

@java.daba.doo

 " crear filtros/interceptores que puedan bloquear el acceso no deseado a recursos de consulta de datos o cualquier recurso que pueda alterarlos o modificar el funcionamiento de tu aplicacion."

Puedes mostrarnos ejemplos de lo que dices. Gracias

Ejemplo de interceptor

En un proyecto que por ahi tengo en Github puedes encontrar un ejemplo funcional.

La clase java es doo.daba.java.basureando.interceptor.ComplementInterceptor y la configuracion del interceptor la encuentras en resources/seguridad/basureandoWeb-context.xml

Imagen de CuicaJavier

@java.daba.doo

Estoy a años luz de entender u.u por dedicarme a hacer aplicativos en Cliente/Servidor, es momento de aprender Web. Algunos blogs, tutoriales que me recomienden para aprender todo lo que son las sesiones, seguridad, cache con JSF, Hibernate, Spring se agradecería.