Quando desenvolvemos aplicações web, é quase impossível não nos preocuparmos com segurança, autenticação do usuário, e restrições de acesso.
Desenvolvendo uma aplicação simples, em que o nível de controle se restringe a controlar seu o usuário está autenticado ou não, o Grails nos permite utilizar a variável session e em conjunto com os filters resolver esta questão (este link demonstra como implementar esta situação).
Porém quando nos deparamos, com sistemas maiores, onde necessitamos de um controle mais rigoroso, a implementação acima citada pode não ser suficiente, e apresentar falhas o que pode causar um enorme transtorno para o desenvolvedor.
Uma opção existente para a segurança de sistemas mais complexos, é o plugin SpringSecurity, com ele é possível criar uma aplicação segura em poucos minutos, facilitando e muito a vida do desenvolvedor.
Este plugin tem muitos recursos, neste post vamos implementar um simples controle de autenticação.
Para isso vamos criar a aplicacao de exemplo:
grails create-app autenticacao
Agora vamos adicionar a dependencia do plugin na sessão plugins do arquivo grails-app/conf/BuildConfig.groovy
da
seguinte forma:
plugins {
...
compile ":spring-security-core:1.2.7.3"
...
}
Agora vamos executar o comando abaixo para que o grails efetue o download do plugin e o instale corretamente na aplicação:
grails refresh-dependencies
O plugin possuí um script para facilitar a sua configuração, e este deve ser executado da seguinte forma:
grails s2-quickstart br.com.teste Usuario Role
Conforme é possível observar para executar o script é necessário passar 3 parâmetros. O primeiro diz respeito ao pacote onde serão gerada as duas classes de domínios necessárias, onde a primeira representa o usuário da apliação e a segunda é os papéis(roles) que o usuário pode assumir.
Este script também vai alterar o arquivo grails-app/conf/Config.groovy
adicionando as seguintes linhas:
plugins {
// Added by the Spring Security Core plugin:
grails.plugins.springsecurity.userLookup.userDomainClassName = 'br.com.teste.Usuario'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'br.com.teste.UsuarioRole'
grails.plugins.springsecurity.authority.className = 'br.com.teste.Role'
}
O plugin também irá criar as views e os controllers para que o usuário efetue o login no aplição.
Agora vamos editar o arquivo grails-app/conf/BootStrap.groovy
para que ao iniciar a aplição seja inserido o usuario
teste e adcionando a role ROLE_ADMIN
a este usuário.
import br.com.teste.Role
import br.com.teste.Usuario
import br.com.teste.UsuarioRole
class BootStrap {
def init = { servletContext ->
def role = new Role(authority: "ROLE_ADMIN")
role.save(flush: true)
def usuario = new Usuario(username: "teste", password: "teste", accountExpired: false, accountLocked: false, passwordExpired: false, enabled: true)
usuario.save(flush: true)
UsuarioRole.create(usuario, role)
}
def destroy = {
}
}
Agora é só executar o comando grails run-app
a aplicação e testar a autenticação do usuário.