2009-08-04 13 views
6

Tengo páginas de suscripción en serie que se complementan entre sí. Cuando la sesión de los usuarios caduca, tengo un Listener que limpia todo en el servidor y funciona muy bien. Pero, si el usuario intenta hacer algo más, solo quiero redirigirlos a la primera página de la serie. Sin embargo, mi filtro no parece funcionar correctamente. Sigo recibiendo javax.faces.application.ViewExpiredExceptionManejo de un ViewState vencido en JSF y Richfaces

¿Cuál es la mejor práctica para manejar esta expceción? Realmente no puedo manejarlo en web.xml porque es demasiado global. Además, la página de error se está procesando a partir de un código JSF. Parece que necesito detectar que esto está sucediendo con un PhaseListener, por lo que la excepción no se produce en primer lugar, pero no he podido encontrar un buen modelo. para saber cómo hacer esto. ¿Algunas ideas?

Respuesta

1

Creo que es la pista correcta con un detector de fase. Esencialmente configura algo en sesión en la primera página. Luego, en el oyente de fase, busque el valor en la sesión. Si no sale, haz una redirección. El truco es hacerlo temprano en el proceso de escucha de fase. No estoy seguro exactamente en qué parte del proceso tu oyente de fase lanza la excepción.

0

Puede comprobar si usted sesión se invalida o no

booleano sessionInValid = httpServletRequest.getRequestedSessionId() = null & & httpServletRequest.isRequestedSessionIdValid()!;

Aquí la variable booleana sessionInValid devolverá verdadero si la sesión se invalida por cualquier medio.

puede agregar a este en un filtro o un oyente a continuación, configurar esto en su archivo web.xml.

1

A mi modo de manejar esto es añadir un filtro a la Web.xml única asignada a las direcciones URL que desea rastrear. Ese filtro comprueba si la sesión ha caducado y luego lo reenvía a una página de inicio de sesión, si es así. Debería funcionar si el filtro se ejecuta antes de ejecutar cualquier código JSF.

2

Richfaces tiene su propio mecanismo para manejar ViewExpiredException, mira Richfaces docs.

+0

pero parece como que sólo funciona para las peticiones ajax – Inv3r53

+0

que hace referencia al período de sesiones * * caducidad, no ver de caducidad. – EJP

1

La forma en que he manejado esto en el pasado es el uso de un oyente que comprueba un campo en un bean de sesión administrado. Si la sesión de los usuarios agota el tiempo de espera, un oyente limpia el mbean y marca que el usuario no ha iniciado sesión. Cada solicitud se envía a través del oyente y, si no se cumplen los requisitos, el usuario se ve obligado a abandonar el sitio. Nunca recibo ViewExpiredException en mi registro. La única vez que se ha producido esta excepción es si el servidor se ha reiniciado y el usuario solicita una página cuando tiene una sesión activa anterior.

Cuestiones relacionadas