En mi aplicación JSF, me sale el nombre del usuario actualmente firmado en como esto ...JSF logout using session.invalidate no borra el nombre de usuario actual?
public String getLoggedInUsername() {
return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
... y puedo comprobar si el usuario ha iniciado sesión como esta ...
public boolean isSignedIn() {
return (getLoggedInUsername() != null);
}
... y cuando los usuarios se fuera, que hacen esto ...
public String doLogout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
httpSession.invalidate();
return "main";
}
Mi problema es después de doLogout(), el getLoggedInUsername() sigue devolviendo el nombre del usuario que se ha conectado. Qué ¿se supone que debo hacer para asegurarme de que getRemoteUser() devuelva null después de cerrar la sesión?
Alternativamente, ¿hay una mejor manera de obtener si isSignedIn() que simplemente verificando el nombre de usuario?
Gracias! Rob
¿Ha depurado los métodos involucrados en sí, o lo adivinó/concluyó usted mismo en función de cómo se comporta el navegador web? La página puede ser solicitada directamente desde el caché del navegador ... – BalusC
Sí, lo depuré. Toco el método doLogout(), después de que está completo, presiono getLoggedInUsername() y devuelve el nombre de usuario del tipo que inició sesión (incluso después de ejecutar session.invalidate). ¿Algunas ideas? –
No sé si estoy enviando un redireccionamiento. :) Supongo que estoy usando el comportamiento predeterminado, en doLogOut() el navegador deja la página en la que estaba y muestra la página main.jsf (que no tiene que haber iniciado sesión para verla, por cierto) ¿Eso ayuda? –