es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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ó.

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.