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.