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

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.?

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 en web.xml le permite definir el valor de tiempo de espera después de lo cual el servidor anulará la sesión.

Puede hacerlo mediante progtwigció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:

  30  

La unidad de tiempo es minutos.

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

 

Hello #{userSession.username},

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; }