En aplicaciones donde se controla el acceso a la información según el rol de cada usuario, se hace necesario a veces un rol de supervisor o super administrador con mayores privilegios de acceso. Incluso puede darse el caso de que ese supervisor necesite hacerse pasar por otros usuarios de la aplicación para consultar la misma información que ellos ven sin necesidad de conocer sus credenciales.

En Grails, mediante el uso del plugin Spring Security Core es posible implementar de una manera sencilla esta suplantación de usuarios.

Una vez se tiene instalado y configurado el plugin, es necesario activar el filtro que permite la suplantación de usuarios, useSwitchUserFilter. Para ello, se añade en el archivo de configuración:

 Groovy |  copy code |? 
1
grails.plugins.springsecurity.useSwitchUserFilter = true


Deben elegirse los roles que tendrán la posibilidad de suplantar a otros, pudiendo incluso definirse un nuevo rol específico (por ejemplo ROLE_SWITCH_USER) para aquellos usuarios a los que queramos dar el privilegio de la suplantación.

Para hacer el cambio de usuario, se debe añadir un formulario similar a este:

 HTML |  copy code |? 
1
<sec:ifAllGranted roles='ROLE_SWITCH_USER'>
2
   <form action='/j_spring_security_switch_user' method='POST'>
3
      Switch to user: <input type='text' name='j_username'/> <br/>
4
      <input type='submit' value='Switch'/>
5
   </form>
6
</sec:ifAllGranted>

Este formulario solamente será visible para aquellos usuarios que tengan el rol ROLE_SWITCH_USER, y además la URL de suplantación de usuarios será protegida para que solamente pueda ser empleada por usuarios autenticados con ese rol. Para proteger la URL se deberá añadir al fichero de configuración:

 Groovy |  copy code |? 
1
grails.plugins.springsecurity.interceptUrlMap = [
2
3
   '/j_spring_security_switch_user': ['ROLE_SWITCH_USER', 'IS_AUTHENTICATED_FULLY']
4
]

Mientras se está suplantando a un usuario, se puede añadir un enlace que permita volver al usuario original:

 Groovy |  copy code |? 
1
2
<sec:ifSwitched>
3
<a href='${request.contextPath}/j_spring_security_exit_user'>
4
   Resume as <sec:switchedUserOriginalUsername></sec:switchedUserOriginalUsername>
5
</a>
6
</sec:ifSwitched>
7

Y en caso de que sea necesario, incluso se pueden personalizar las URLs que se utilizan durante el flujo de la suplantación:

 Groovy |  copy code |? 
1
grails.plugins.springsecurity.switchUser.switchUserUrl =//URL para suplantar a otro usuario (por defecto '/j_spring_security_switch_user')
2
grails.plugins.springsecurity.switchUser.exitUserUrl =//URL para volver al usuario inicial (por defecto '/j_spring_security_exit_user')
3
grails.plugins.springsecurity.switchUser.targetUrl =// URL a la que redirigir después de hacer el cambio
4
grails.plugins.springsecurity.switchUser.switchFailureUrl = ... //URL a la que redirigir en caso de error

Para comprobar en cada caso qué usuario está autenticado en la aplicación se puede añadir este código a la GSP:

 Groovy |  copy code |? 
1
<sec:ifLoggedIn>
2
Logged in as <sec:username></sec:username>
3
</sec:ifLoggedIn>

Etiquetas: , , , , , ,

2 Respuestas


  1. [...] Cómo suplantar o impersonar a un usuario utilizando el Plugin Spring Security en Grails [...]

  2. [...] Cómo suplantar o impersonar a un usuario utilizando el Plugin Spring Security en Grails [...]


Deja tu comentario


8 − = 0