getsession getexternalcontext false jsf httpsession

getexternalcontext - login jsf



JSF logout using session.invalidate no borra el nombre de usuario actual? (2)

Asegúrese de redirigir la solicitud después de invalidar la sesión. El principal de usuario se resuelve en función de un atributo de sesión. Por lo tanto, cuando acaba de reenviar a la página de destino (como lo hace un caso de navegación JSF de forma predeterminada), seguirá estando allí en la página de destino, ya que utiliza la misma referencia de HttpSession . Una redirección indica al HttpSession web que HttpSession una nueva solicitud HTTP, lo que obliga al servidor a recrear la referencia HttpSession función de la nueva solicitud.

Agregue <redirect/> a la caja de navegación para forzar a JSF a enviar una redirección. O cuando ya está en JSF 2.0, agregue ?faces-redirect=true al valor de resultado.

En mi aplicación JSF, obtengo el nombre del usuario actualmente conectado así ...

public String getLoggedInUsername() { return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); }

... y verifico si el usuario ha iniciado sesión así ...

public boolean isSignedIn() { return (getLoggedInUsername() != null); }

... y cuando el usuario cierra la sesión, hago 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 () aún devuelve el nombre del usuario que inició sesión. ¿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! Robar


Después de la llamada "session.invalidate ();" , agregue "request.logout ();".

El método invalida en el objeto de la sesión solo limpia los datos de la sesión.

El método logout al objeto request establece null como el valor devuelto cuando se llama a getUserPrincipal, getRemoteUser y getAuthType en la solicitud.