miércoles, 4 de marzo de 2015

Configurar Spring Security Core Plugin 2.0 en Grails



Existen tres formas de configurar el plugin de Spring Security: Annotation, RequestMap y IntercepUrlMap, en tutoriales anteriores describí la forma de hacerlo mediante RequestMap y en esta ocasión veremos como configurarlo mediante Anotaciones, además de que usaremos la versión 2.0 que nos proporciona un script que nos ayudará a crear nuestra configuración de manera rápida y casi automática, asumimos que tenemos un proyecto Grails recién creado, las versiones que utilice al momento de este tutorial son: Grails 2.4.4 y Java 1.7.


Instalando el plugin de Spring Security

La manera más simple de instalar un plugin es mediante el comando: install-plugin “nombre plugin” en esta ocación también lo haremos manual y para ello nos vamos al archivo “grails-app/conf/BuildConfig” buscamos la sección de plugins y ponemos lo siguiente:

plugins {
…
    compile ':spring-security-core:2.0-RC4'
…
}

* Esta es la manera más recomendable de instalar cualquier plugin o dependencia.


Configurando el plugin de Spring Security

Spring proporciona las configuraciones por default en el archivo: “DefaultSecurityConfig.groovy” todas ellas traen valores por default y se pueden sobreescribir directamente desde el archivo: “Config.groovy” por ahora no necesitamos mover nada para empezar.


Dominios requeridos

Spring requeire ciertas clases de dominio, y es aquí donde vamos a utilizar el script que mencionaba al inicio, para crear estas clases basta con ejecutar:
grails s2-quickstart “paquete” “nombreDominios”

por ejemplo:
grails s2-quickstart com.testapp.seguridad User Role
Con la instruccion anterior el script creará automáticamente tres clases de dominio: User, Rol y UserRole las cuales podemos modificar para adaptar a nuestras necesidades, para el ejemplo las dejaremos tal cual se generaron. También se realizan modificaciones en el archivo: “Config.groovy” agregando las siguientes líneas:

// Added by the Spring Security Core plugin:
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.testapp.seguridad.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.testapp.seguridad.UserRole'
grails.plugin.springsecurity.authority.className = 'com.testapp.seguridad.Role'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
   '/':                              ['permitAll'],
   '/index':                         ['permitAll'],
   '/index.gsp':                     ['permitAll'],
   '/assets/**':                     ['permitAll'],
   '/**/js/**':                      ['permitAll'],
   '/**/css/**':                     ['permitAll'],
   '/**/images/**':                  ['permitAll'],
   '/**/favicon.ico':                ['permitAll']
]

Nos podemos dar cuenta que únicamente se le indica a Spring la ubicación de nuestras clases requeridas y una configuración sencilla sobre los accesos a paginas default de nuestra aplicación.


Agregando datos de ejemplo

Por ahora vamos a poner datos de ejemplo en “BootStrap.groovy” en el cual agregaremos lo siguiente dentro de init:
def init = { servletContext ->
    def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
    def userRole = new Role(authority: 'ROLE_USER').save(flush: true)

    def testUser = new User(username: 'me', password: 'password')
    testUser.save(flush: true)

    UserRole.create testUser, adminRole, true

    assert User.count() == 1
    assert Role.count() == 2
    assert UserRole.count() == 1
}

Simplemente estamos definiendo dos roles y un usuario, así como la relación entre el usuario y el rol administrador


Probando la configuración

Para realizar esta prueba necesitaremos crear un controlador en el cual agregaremos dos métodos por ejemplo:
def sinSeguridad(){
    println "entrando a sin seguridad..."
}

@Secured(['ROLE_ADMIN'])
def conSeguridad(){
    println "entrando a la administración de usuarios.."
}

Nótese que uno de los métodos esta anotado con “@Secured” que no es más que la anotación de Spring que nos permite realizar la configuración sobre que rol o roles tendrán acceso a ese método. Después creamos sus respectivas páginas y lanzamos la aplicación, una vez que esté en funcionamiento tratamos de entrar a la página: “conSeguridad” desde la url correspondiente y notaremos que Spring nos envía automáticamente una pantalla simple de Login, sin poner datos cambiamos la url apuntando a la página “sinSeguridad” y podremos ver su contenido sin problemas, nuevamente regresamos a la url “conSeguridad” y ahora en la pantalla de Login pondremos los datos del usuario que previamente dimos de alta en el boostrap (me,password) y presionar el botón Login si las credenciales son correctas ya nos permitirá ver el contenido.

No hay comentarios:

Publicar un comentario