Tengo el requisito de que el usuario final no pueda volver a la página restringida después de cerrar sesión. Pero actualmente, el usuario final puede hacerlo mediante el botón Atrás del navegador, visitando el historial del navegador o incluso volviendo a ingresar la URL en la barra de direcciones del navegador.
Básicamente, quiero que el usuario final no pueda acceder a la página restringida de ninguna manera después de cerrar sesión. ¿Cómo puedo lograr esto mejor? ¿Puedo desactivar el botón Atrás con JavaScript?
Respuestas:
Puede y no debe desactivar el botón de retroceso o el historial del navegador. Eso es malo para la experiencia del usuario. Hay hacks de JavaScript, pero no son confiables y tampoco funcionarán cuando el cliente tenga JS deshabilitado.
Su problema concreto es que la página solicitada se cargó desde la caché del navegador en lugar de directamente desde el servidor. Esto es esencialmente inofensivo, pero de hecho confunde al usuario final, porque él / ella piensa incorrectamente que realmente proviene del servidor.
Solo necesita indicarle al navegador que no almacene en caché todas las páginas JSP restringidas (y, por lo tanto, no solo la página / acción de cierre de sesión en sí). De esta manera, el navegador se ve obligado a solicitar la página del servidor en lugar de la caché y, por lo tanto, se ejecutarán todas las comprobaciones de inicio de sesión en el servidor. Puede hacer esto usando un filtro que establece los encabezados de respuesta necesarios en el
doFilter()
método:Mapee esto
Filter
en un lugarurl-pattern
de interés, por ejemplo*.jsp
.O si desea poner esta restricción solo en páginas seguras, debe especificar un patrón de URL que cubra todas esas páginas seguras. Por ejemplo, cuando todos están en la carpeta
/app
, debe especificar el patrón de URL de/app/*
.Aún más, puede hacer este trabajo en el mismo lugar
Filter
donde está verificando la presencia del usuario que inició sesión.¡No olvide borrar la memoria caché del navegador antes de realizar la prueba! ;)
Ver también:
fuente
doFilter()
método. Cuando presiono el botón de cierre de sesión, se redirige a un servlet en el que invalido la sesión. No estoy seguro de cómodoFilter()
entra en juego el método aquí. ¿Puede decirme cómo implementar esto? Como en, los pasos correctos a seguir. Gracias.sendRedirect(...)
yforward()
.* .jsp en Url Pattern no funcionará si reenvía una página. Intente incluir su servlet también ... eso hará que su aplicación esté segura de este problema del botón de retroceso.
fuente
La forma más sencilla de hacerlo sin deshabilitar el botón de retroceso del navegador es agregar este código al
page_load
evento de la página a la que no desea que el usuario vuelva después de cerrar la sesión:fuente
Puede intentar decirle al navegador que no almacene en caché la página de inicio (usando los encabezados apropiados - Expires, Cache-Control, Pragma). Pero no se garantiza que funcione. Lo que puede hacer es realizar una llamada ajax al servidor en la carga de la página para verificar si el usuario está registrado, y si no, redirigir.
fuente
La forma correcta de hacer esto es agregar el
encabezado en páginas seguras. Cuando el usuario cierre la sesión, borre su cookie de sesión. Luego, cuando naveguen hacia atrás después de cerrar la sesión, el caché del navegador fallará. Esto también tiene la ventaja de no anular completamente el almacenamiento en caché.
fuente