prácticos - jsp java ejemplo
¿Cómo verificar si un usuario está conectado o no en Servlets? (3)
La especificación de Java Servlet 3.1 (Sección 13.10) establece:
Al iniciar sesión en una aplicación durante el procesamiento de una solicitud, corresponde precisamente a la existencia de una identidad de llamada no
null
válida asociada con la solicitud, como puede determinarse llamando agetRemoteUser
ogetUserPrincipal
en la solicitud. Unnull
retornonull
de cualquiera de estos métodos indica que la persona que llama no ha iniciado sesión en la aplicación con respecto al procesamiento de la solicitud.
En un Servlet de Java , quiero verificar programáticamente si un usuario está conectado o no .
El HttpServletRequest#getUserPrincipal()
como se señala en la otra respuesta solo se aplica cuando utiliza la seguridad administrada por contenedor proporcionada por Java EE como se describe aquí .
Si, de todos modos, usted es dueño de su propia seguridad, debe confiar en HttpSession
. No es tan difícil, aquí hay una descripción general de lo que necesita implementar en cada paso:
Al iniciar sesión, obtenga el User
de la base de datos y guárdelo en sesión en doPost()
del servlet :
User user = userDAO.find(username, password);
if (user != null) {
session.setAttribute("user", user);
} else {
// Show error like "Login failed, unknown user, try again.".
}
Al cerrar la sesión, simplemente invalide la sesión en doPost()
del servlet. Destruirá la sesión y borrará todos los atributos.
session.invalidate();
Para comprobar si un User
está conectado o no, cree un filtro que esté correlacionado con un url-pattern
que cubra las páginas restringidas, por ejemplo /secured/*
, /protected/*
, etcétera e implemente doFilter()
como se muestra a continuación:
if (session.getAttribute("user") == null) {
response.sendRedirect(request.getContectPath() + "/login"); // Not logged in, redirect to login page.
} else {
chain.doFilter(request, response); // Logged in, just continue chain.
}
Eso es básicamente todo.