En marcha con Grails. Los plugins Spring security core y Spring security ui

Llevo unos días trasteando con Grails y descubriendo sus maravillas (y de paso las de Groovy). Me está gustando tanto que en unos días me pasaré por Madrid para asistir a Greach.

Creo que la única forma de aprender algo bien es utilizándolo, así que he empezado a desarrollar una aplicación en Groovy utilizando como framework Grails.

Es impresionante como sin tener que escribir a penas código tenemos una aplicación funcionando, con su gestión de usuarios, registro, login....

A continuación os dejo los pasos a seguir, desde la creación de la aplicación, para poner en marcha dos plugins de Grails: Spring Security Core y Spring Security UI

Este ejemplo está basado en la versión 1.3.7 de grails que debe estar previamente instalado.

>c:\desarrollos\workspace
>grails create-app exampleApp

Instalamos los plugins:
>cd exampleApp
>grails install-plugin spring-security-core
>grails install-plugin mail
>grails install-plugin spring-security-ui

Creamos los objetos para usuario y role (en el paquete que queremos):
grails s2-quickstart com.exampleApp.security  User Role

Para poder configurar las pantallas y temas de registro y usuarios:
grails s2ui-override layout
grails s2ui-override user com.exampleApp.security
grails s2ui-override register com.exampleApp.security

Configuramos el envío de correos. Para ello, introducimos las siguientes líneas en Config.groovy
// Configuration of the mail account
grails {
   mail {
host = "smtp.gmail.com"
port = 465
username = "info.exampleApp@gmail.com"
password = "exampleAppPassword"
props = ["mail.smtp.auth":"true",
"mail.smtp.socketFactory.port":"465",
"mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
"mail.smtp.socketFactory.fallback":"false"]
   }
}
grails.mail.default.from="info.exampleApp@gmail.com"

Solo con hacer esto no funciona todo el proceso de registro y login. No se está desbloqueando al usuario a pesar de activar el registro desde el link que se envía por correo. Para corregirlo hacemos lo siguiente:



  • Sobreescribir el método com.exampleApp.security.RegisterController.verifyRegistration
  • Añadimos su implementación , la copiamos desde grails.plugins.springsecurity.ui.RegisterController
  • Modificamos la siguiente línea: 
user.accountLocked = false
//Add flush:true
user.save(flush: true)

Por otro lado, tanto el spring-core como el spring-core-ui están codificando el password. Por lo que una vez activado el usuario no es posible entrar en la aplicación. Para poder hacerlo, eliminamos los métodos: beforeInsert, beforeUpdate y encodePassword de com.exampleApp.security.User

Con estos sencillos pasos, tenemos nuestra aplicación funcionando correctamente con registro de usuarios, gestión de usuarios y roles, login, logout.... ¿Fácil verdad?

6 comentarios:

Unknown dijo...

Hola, esta muy bueno tu post. Pero quería hacerte una consulta, resulta que yo estoy partiendo con Grails y necesito que me una página muestre información según el usuario logeado, por ejemplo si inicio con el usuario Y, solo me muestre la información que le corresponde a el, y asi con todos los usuarios, tu sabes ocmo hacerlo?

Jordi dijo...

Buen trabajo! Y ha funcionado a la primera, eso se agradece! :D

ezequielk dijo...

me quede trabado en la parte de sobreescribir el metodo, en ningu momento me aparece com.exampleApp.security.RegisterController.verifyRegistration

Unknown dijo...

Igual que ezequielk... todo fino y simple pero no explicaste bien el final y lo mas importante.

ruben dijo...

Igual que ezequielk y oscar... me ha faltado lo último y no he podido hacerlo. Tampoco entiendo por qué necesitas borrar el encodePassword.

Jessi dijo...

Hola,
Los últimos pasos eran necesarios por la versión de Grails y la versión de los plugins con los que estaba trabajando en ese momento. Había un pequeño conflicto entre ellos (sin mal no recuerdo).
En versiones posteriores en las que he tenido que utilizalos no he tenido ningún problema y era suficiente con instalarlos y seguir los pasos de la docu,

Publicar un comentario