Login inválido
31/07/2011 12:02
0
Olá,

Quando tento fazer o login, diz que o usuário e password não foram encontrados.
Estou utilizando o mysql e na tabela verifiquei que o secuser está ok, inclusive o secrole e secusersecrole.
Detalhe, defini que a classe pessoa estende secuser e a classe funcionário estende pessoa.
Já tentei de outras formas e não funcionou.

Uso o STS e instalei o plugin spring-security-core 1.1.2.

abs,

Georgenes
Tags: mysql, login, inválido, spring-security-core, sts


0
Oi Georgenes,

tem como detalhar melhor o seu problema? Como são suas classes de domínio? E seus controladores?



0
Agradeço seu retorno Henrique,

É o seguinte vou tentar descrever melhor como está a situação:

Domínios principais: SecRole, SecUser, SecUserSecRole, Pessoa, Funcionário e Cliente, onde Pessoa estende SecUser, e funcionário e Cliente estendem Pessoa. outros domínios: solicitação, resposta, setor, tipo de solicitação...
Os contraladores estão todos scaffold ou se estiveram estáticos não foram alterados, e além dos controladores desses domínios, tem ainda o controlador do login e do logout, que não tem domínio.

No banco a senha não está encriptografada como achei que estivesse.
após instalar o plugin, executei o s2-quickstart, coloquei as páginas de login e logout no urlmapping.

No config acrescentei:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'helpdesk.SecUser'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'helpdesk.SecUserSecRole'
grails.plugins.springsecurity.authority.className = 'helpdesk.SecRole'

testei com e sem a proteção das páginas e nada deu certo. sempre dando inválido no login.

Penso que tem algo haver na encriptação da senha. Estou inicializado os valores dos domínios, através de cadastro e não através do bootstrap o qual tentei mais não estava conseguindo.

Espero ter clareado mais.

Atenciosamente,

Georgenes
02/08/2011 00:32


1
Oi Georgenes, você sabe como a senha foi encriptada?


0
Henrique, não foi. Está gravando no banco admin.

Teria que colocar nas ações, edit, save e update, tendo em vista que eu não estou fazendo pelo bootstrap.
Não fiz pelo bootstrap porque está mais difícil por conta das duas heranças.

def save = {
def secUserInstance = new SecUser(params)
if (secUserInstance.save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'secUser.label', default: 'SecUser'), secUserInstance.id])}"
redirect(action: "show", id: secUserInstance.id)
}
else {
render(view: "create", model: [secUserInstance: secUserInstance])
}
}
------------------------------edit-------------------

def edit = {
def secUserInstance = SecUser.get(params.id)
if (!secUserInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'secUser.label', default: 'SecUser'), params.id])}"
redirect(action: "list")
}
else {
return [secUserInstance: secUserInstance]
}
}
---------------------------update------------------------------
def update = {
def secUserInstance = SecUser.get(params.id)
if (secUserInstance) {
if (params.version) {
def version = params.version.toLong()
if (secUserInstance.version > version) {

secUserInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'secUser.label', default: 'SecUser')] as Object[], "Another user has updated this SecUser while you were editing")
render(view: "edit", model: [secUserInstance: secUserInstance])
return
}
}
secUserInstance.properties = params
if (!secUserInstance.hasErrors() && secUserInstance.save(flush: true)) {
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'secUser.label', default: 'SecUser'), secUserInstance.id])}"
redirect(action: "show", id: secUserInstance.id)
}
else {
render(view: "edit", model: [secUserInstance: secUserInstance])
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'secUser.label', default: 'SecUser'), params.id])}"
redirect(action: "list")
}
}
03/08/2011 02:04


1
vc precisa criptografar a senha, pois o plugin irá pegar a senha passada via "form", criptografar e comparar...

http://grails-plugins.github.com/grails-spring-security-core/docs/manual/index.html

[pre]
class UserController {
def springSecurityService

def save = {
def userInstance = new User(params)
userInstance.password = springSecurityService.encodePassword(
params.password, userInstance.username)
if (!userInstance.save(flush: true)) {
render view: 'create', model: [userInstance: userInstance]
return
}

flash.message = "The user was created"
redirect action: show, id: userInstance.id
}

def update = {
def userInstance = User.get(params.id)

if (userInstance.password != params.password) {
params.password = springSecurityService.encodePassword(
params.password, userInstance.username)
}
userInstance.properties = params
if (!userInstance.save(flush: true)) {
render view: 'edit', model: [userInstance: userInstance]
return
}

if (springSecurityService.loggedIn &&
springSecurityService.principal.username == userInstance.username) {
springSecurityService.reauthenticate userInstance.username
}

flash.message = "The user was updated"
redirect action: show, id: userInstance.id
}
}
[/pre]
03/08/2011 17:18


2
continuação da última resposta....

params.password = springSecurityService.encodePassword(params.password, userInstance.username)

vc só deve passar o segundo parâmetro e assim definiu no Config.groovy, se não passou, fica assim

params.password = springSecurityService.encodePassword(params.password)

te aconselho a testar no grails console, conhece?
03/08/2011 17:21


0
Henrique e Adrian, obrigado, consegui resolver o problema.
Ficou da seguinte maneira após a subistituição:

def springSecurityService
def save = {
def pessoaInstance = new Pessoa(params)
pessoaInstance.password = springSecurityService.encodePassword(params.password)
if (pessoaInstance.save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'pessoa.label', default: 'Pessoa'), pessoaInstance.id])}"
redirect(action: "show", id: pessoaInstance.id)
} else {
render(view: "create", model: [pessoaInstance: pessoaInstance])
}
}



def update = {
def pessoaInstance = Pessoa.get(params.id)
if (pessoaInstance.password != params.password) {
if (params.version) {
params.password = springSecurityService.encodePassword(params.password)
def version = params.version.toLong()
if (pessoaInstance.version > version) {

pessoaInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'pessoa.label', default: 'Pessoa')] as Object[], "Outro usuário está atualizando este cadastro enquanto você está editando")
render(view: "edit", model: [pessoaInstance: pessoaInstance])
return
}
}
pessoaInstance.properties = params
if (!pessoaInstance.hasErrors() && pessoaInstance.save(flush: true)) {
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'pessoa.label', default: 'Pessoa'), pessoaInstance.id])}"
redirect(action: "show", id: pessoaInstance.id)
}
else {
render(view: "edit", model: [pessoaInstance: pessoaInstance])
}
if (springSecurityService.loggedIn && springSecurityService.principal.username == pessoaInstance.username) {
springSecurityService.reauthenticate pessoaInstance.username
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'pessoa.label', default: 'Pessoa'), params.id])}"
redirect(action: "list")
}
}
04/08/2011 00:40


0
As alterações foram todas na classe PessoaController que está fazendo o papel de UserController no exemplo.
04/08/2011 00:42



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