Sobrescrevendo metodo set
22/09/2014 20:39
1
Realizando estudos me deparei com uma situação onde sobrescrevi o método set de um atributo que referencia o hash da senha, da seguinte forma:
1 - Criei um codec para criptografar a senha
2 - No atributo hashSenha da classe usuário sobrescrevi o metodo set chamando o encode para criptografia, exemplo.

void setHashSenha(String hashSenha){
this.hashSenha = hashSenha
if (hashSenha != null)
this.hashSenha = hashSenha.encodeAsPassword()
}

Problema: ao criar um forme de login onde informo a senha, criptografo a senha informada e comparo com a senha já criptografada no banco percebo que na segunda chamada a este metodo de login o meu método set sobrescrito foi chamado alterando assim a minha senha persistida no banco. Qual o motivo deste comportamento?

obs: este link trás informações que não compreendi bem http://cleberlecheta.wikidot.com/grails
Tags: metodo set, gorm, encode


0
Oi Alexandre,

neste caso o que costumo fazer é o seguinte. Incluo na minha classe de domínio um atributo do tipo transiente para a senha. E sobrescrevo o setter para a senha, este sim definindo o valor do hashSenha.

Como no exemplo a seguir:


class Usuario {
String senha
String hashSenha

static transients = ['senha']

void setSenha(String value) {
this.senha = senha
this.hashSenha = codificaSenha(value)
}
}


0
Kico desta forma funciona perfeitamente, apenas tive que incluir o campo senha no _form, pois ele não foi criado automaticamente (não sei porque).

Em java o método set inscrito funcionaria corretamente, imagino que no Groovy tenha haver com o fato da linguagem ser dinamica, etc. Mas porque escrevendo o código que encripta a senha direto no atributo hashSenha tenho o valor já persistido alterado?



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto