Problema ao recuperar usuário logado
15/10/2010 00:00
0
Estou utilizando o plugin Acegi e estou com problemas ao recuperar o usuário logado. A recuperação funciona num controller e no outro não.

Possuo 2 classes ligadas: Usuario (do Acegi) e Livro (cada usuário terá sua própria lista de livros).

Para testar a recuperação do usuário criei o controller Secure, mapei-o no requestmap e inseri o código abaixo. Ele mostrou o usuário logado sem problemas.

class SecureController {

def authenticateService

def index = {
def usuario = authenticateService.principal()
render 'Usuario logado&#58; <br>' + usuario
}
}


O erro ocorre no LivroController. Ao inserir o código abaixo para recuperar o usuário posteriormente:
class LivroController {
def authenticateService // ** estas 2 linhas são a causa do problema (se desativá-las o código funciona)
def usuario = authenticateService.principal() // ** mas no secureController funciona sem problemas

static allowedMethods = [save&#58; &quot;POST&quot;, update&#58; &quot;POST&quot;, delete&#58; &quot;POST&quot;]

def index = {
redirect(action&#58; &quot;list&quot;, params&#58; params)
}

def list = {
params.max = Math.min(params.max ? params.int('max') &#58; 10, 100)
[livroInstanceList&#58; Livro.list(params), livroInstanceTotal&#58; Livro.count()]
}

(...)
}


ele apresenta a seguinte mensagem de erro:

Error 500&#58; Error creating bean with name 'web.LivroController'&#58; Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException&#58; Could not instantiate bean class [web.LivroController]&#58; Constructor threw exception; nested exception is java.lang.NullPointerException&#58; Cannot invoke method principal() on null object
Servlet&#58; grails
URI&#58; /Autentica5/grails/livro/index.dispatch
Exception Message&#58; Cannot invoke method principal() on null object
Caused by&#58; Error creating bean with name 'web.LivroController'&#58; Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException&#58; Could not instantiate bean class [web.LivroController]&#58; Constructor threw exception; nested exception is java.lang.NullPointerException&#58; Cannot invoke method principal() on null object
Class&#58; LivroController


Agradeço a quem puder me auxiliar a resolver este problema.
Tags: Grails


0
Não é por nada, até acho que estou errado mas o código:
 def usuario = authenticateService.principal()  // ** mas no secureController funciona sem problemas

no LivroController, não deveria estar dentro de alguma action?

Estando fora de alguma action parece meio errado, ainda mais se não tiver um usuário logado no sistema ainda, tenta colocar isso dentro de alguma action como está no seu SecureController.

PS: Não use o acegi, utilize o spring-security-core.
15/10/2010 00:00


0
É isso mesmo lucasDie. Colocando o código dentro das actions ele funciona. Obrigado.

Eu vi que o spring-security-core substituiu o acegi mas o problema que encontrei nele (e que não me atendeu) foi que se faz necessário instalar um plugin complementar (o spring-security-ui) para que o próprio usuário faça seu registro e precisa confirmar o registro através de um link enviado por e-mail.
Eu quero que o usuário faça seu registro mas não preciso de confirmação. Por isso, por enquanto, vou permanecer com o acegi.

Obrigado pela ajuda.
18/10/2010 00:00


0
Olá arisales,

Para utilizar o security-core não é necessário utilizar o security-ui.

Eu por exemplo, o utilizo sem o ui o/

Mas é bacana o projeto do ui, pelo menos pra ver o security-core e os outros funcionando blznha.

Abraço.
18/10/2010 00:00


0
[quote=&quot;v1c70r&quot;]Olá arisales,

Para utilizar o security-core não é necessário utilizar o security-ui.

Eu por exemplo, o utilizo sem o ui o/

Mas é bacana o projeto do ui, pelo menos pra ver o security-core e os outros funcionando blznha.

Abraço.[/quote]

Olá v1c70r.

Mas só no ui que eu encontrei a opção para que o próprio usuário efetue seu cadastro .

O problema é que esta opção de auto-cadastro no spring-security (diferente do Acegi) obriga a enviar um e-mail de confirmação e é isto que não quero (e não necessito).

Caso haja uma opção de auto-cadastro sem confirmação (e de preferência sem usar o ui) gostaria de saber.

Obrigado.
19/10/2010 00:00


0
Utilizando o security-core, para um usuário poder se auto-cadastrar, basta criar um formulário comum e antes de salvar sua entidade de usuário encriptar a senha utilizando o springSecurityService:
def senhaEncriptada = springSecurityService.encodePassword(params.senha)
19/10/2010 00:00


0
[quote=&quot;v1c70r&quot;]Utilizando o security-core, para um usuário poder se auto-cadastrar, basta criar um formulário comum e antes de salvar sua entidade de usuário encriptar a senha utilizando o springSecurityService:
def senhaEncriptada = springSecurityService.encodePassword(params.senha)
[/quote]

Valeu. Vou olhar.
19/10/2010 00:00



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