Cerrar sesión de un usuario mediante programación

Tras el inicio de sesión del usuario, verifico sus roles. Si no tienen roles, quiero desconectarlos. Esto es lo que estoy haciendo ahora:

if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
    redirect(uri: '/book/edit')
}
else if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
    redirect(uri: '/book/list')
}
else {
    redirect(uri: '/login/auth')
}

Esto no funciona porque hay una redirección recursiva a /login/auth. ¿Cómo hago esto correctamente (cerrar sesión y luego redirigir a /login/auth)?

preguntado el 12 de junio de 12 a las 07:06

¿Por qué no hacer que estos usuarios, sin roles, estén deshabilitados? -

2 Respuestas

Por cierto, para cerrar la sesión del usuario actualmente conectado, puede hacer la siguiente llamada:

SecurityContextHolder.clearContext()

Respondido el 12 de junio de 12 a las 08:06

Extremadamente útil en pruebas de integración - alex abdugafarov

class AnyController {    
    def logoutHandlers

    def method = {
    ...
        logoutHandlers.each { handler ->
            handler.logout(request, response, springSecurityService.authentication)
        }
    }
}

Respondido el 12 de junio de 12 a las 14:06

¿Qué pasaría como request y response? ¿Hay algún tipo de función http que me dé estos? - zoran119

No. Son objetos estándar HttpRequest y HttpResponse accesibles para todos los controladores: Jenk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.