¿Cómo cerrar sesión en Spring Security en Vaadin?
¿Hay un ejemplo práctico de cómo cerrar sesión de manera programática en Spring Security? He intentado muchas formas y ninguna funciona; la identificación de sesión permanece válida en el navegador.
Aquí está el código que estoy usando:
activeUserMenu.addItem("Cerrar sesión", e -> {
UI.getCurrent().getPage().setLocation("/");
SecurityContextHolder.clearContext();
SecurityContextLogoutHandler logoutHandler = new SecurityContextLogoutHandler();
logoutHandler.logout(
VaadinServletRequest.getCurrent().getHttpServletRequest(), null,
null);
for(Cookie cookie : VaadinServletRequest.getCurrent().getCookies()) {
cookie.setMaxAge(0);
}
});
Nota: Inicio sesión a través de un formulario personalizado de Thymeleaf. En teoría, todo lo que tengo que hacer es redirigir el navegador a la URL predeterminada de Spring “/logout”. Sin embargo, Vaadin me indica que el enrutador no reconoce esa URL. He intentado varias otras formas, incluyendo el uso de JavaScript y manejar un GET a “/logout”. Ninguno funcionó.
davy.ai
Sí, hay un ejemplo práctico de cómo cerrar sesión programáticamente en Spring Security. El código que proporcionaste parece correcto y debería limpiar la sesión del usuario y cerrar sesión. Sin embargo, a veces el ID de sesión puede seguir siendo válido en el navegador debido al caché del navegador. Para evitar esto, puedes agregar encabezados de control de caché a la respuesta o utilizar un WebSecurityConfigurerAdapter diferente para desactivar el caché. Otra opción es invalidar manualmente la sesión llamando a HttpSession.invalidate() antes de llamar a SecurityContextHolder.clearContext(). Además, puedes intentar utilizar LogoutFilter de Spring Security para manejar el proceso de cierre de sesión en lugar de manejarlo manualmente en tu código.