sesiones sesion cerrar java security java-ee servlets logout

sesion - Cómo cerrar sesión correctamente de una aplicación web Java EE 6 después de iniciar sesión



login primefaces (3)

Un requisito bastante simple. Después de iniciar sesión en la aplicación web J2EE 6, ¿cómo puedo hacer que el usuario cierre la sesión nuevamente?

La mayoría (¿todos?) De los libros y tutoriales que he visto muestran cómo agregar una página de login / loginerror a su aplicación y demostrar el uso de los principales / roles / dominios de seguridad, etc. usando el método "j_security_check", todo bien. Pero no está claro cómo darle al usuario la posibilidad de desconectarse. De hecho, ¿cómo puedo forzar un cierre de sesión después de, por ejemplo, que la sesión se agote, etc.?


Proceso de dos pasos -

1.crear la página de cierre de sesión
2.crear un bean de sesión con un método de cierre de sesión

PASO A: la página de cierre de sesión

<div class="mytext"> <p>Hello #{userSession.username}, </p> <p><h:outputText value="It doesn''t seem you''re logged in anyway..." rendered="#{!userSession.userLoggedIn}" /></p> </div> <h:form class="mytext" rendered="#{userSession.userLoggedIn}" > <h:panelGrid columns="2" > <h:outputLabel value="Do you want to logout?" for="logout" /> <p:commandButton value="Logout" id="logout" action="#{userSession.logout}" /> </h:panelGrid> </h:form>

PASO B: Código de respaldo de beans de sesión (fragmento)

public String logout() { HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); session.invalidate(); return "/index?faces-redirect=true"; } public boolean isUserLoggedIn() { String user = this.getUsername(); boolean result = !((user == null)|| user.isEmpty()); return result; } /** Get the login username if it exists */ public String getUsername() { String user = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); return user; }


Puede hacerlo mediante programación utilizando logout() HttpServletRequest de HttpServletRequest . También hay un método correspondiente para iniciar sesión con nombre de usuario y contraseña. Estos métodos se han agregado en Servlet 3.0, por lo que están disponibles en Java EE 6.

Un tiempo de espera es una bestia diferente y se puede especificar en web.xml siguiente manera:

<session-config> <session-timeout>30</session-timeout> </session-config>

La unidad de tiempo es minutos.


Debe tener logout servlet/jsp que invalide la sesión de las siguientes maneras:

  • Antes de Servlet 3.0, utilizando el session.invalidate() method que también invalida la sesión.
  • Servlet 3.0 proporciona un método API HttpServletRequest.logout() que invalida solo el contexto de seguridad y la sesión aún existe.

Y la interfaz de usuario de la aplicación debería proporcionar un enlace que invoque ese logout servlet/jsp

Pregunta: De hecho, ¿cómo puedo forzar un cierre de sesión después de, por ejemplo, que la sesión se agote, etc.?

Respuesta: El <session-timeout> en web.xml le permite definir el valor de tiempo de espera después de lo cual el servidor anulará la sesión.