Vraptor - Usuario da sessao no decorator Sitemesh?
19 respostas
M
maaarkin
Bem pessoal, seguinte, eu tenho um Main.jsp que é o template principal da minha pagina e a barra de menu superior está nessa pagina, e queria saber se tem como deixar os dados do usuario da sessao nessa bara de menu superior, só que atualmente para pegar os dados desse usuario eu Injeto UsuarioWeb nos controladores, só que eu queria já deixar em um unico canto esses dados, sem ter que ficar injetando toda vez nos controladores da pagina em questão. é possivel?
por exemplo no JSF eu usava um ContextoBean(quem possuia o usuario da sessao) e deixava isso no template na area do menusuperior e toda vez que a pagina era invocada já estava la o usuario da sessao, é possivel fazer algo do tipo?
se UsuarioWeb for um @SessionScoped, vc pode acessá-lo usando ${usuarioWeb} em qualquer jsp.
M
maaarkin
lucas, atualmente com o spring security estou usando o vraptorRequest (axo que é assim o nome) e utilizando o getRemoteUser() para pegar o user da sessao e colocar no objeto, essa é a forma correta de pegar o usuario da sessao com vraptor?
Lucas_Cavalcanti
não seria o request.getAuthority() ?
M
maaarkin
olha, é porque no JSF faço o mesmo com o context com getRemoteUser, só que nunca trabalhei com esse vraptorRequest, minha pergunta é exatamente essa, como é feito com ele, é atraves do getRemoteUser()? ou no caso esse request.getAuthority()? esse request.getAuthority() é do vraptorRequest, tenho essas duvidas ae pq sou iniciante no vraptor ainda, desculpa.
M
maaarkin
Lucas, dessa forma, esse meu UsuarioWeb, precisa ser um @component ou @resource?
M
maaarkin
estou tentando acessar na pagina header.jsp e nao consigo, só consigo se eu passar ele no construto de algum controller e chamar na pagina do controller, só que header.jsp nao possui controller, é o header onde ficará a msg de bem vindo usuario.
Lucas_Cavalcanti
mas esse cara é um componente @SessionScoped?
M
maaarkin
é sim, é isso que estou estranhando, só funciona quando eu passo esse usuarioweb no construtor de algum controller e na pagina do controller.
M
maaarkin
codigo completo do UsuarioWeb, estou fazendo uns testes aqui. mais nem o objeto em si aparece em pagina alguma, só aparece se eu colocar ele dentro de um construtor de algum Controller, ai sim ele reconhece.
ah tá, é que ele precisa ser criado em algum momento… mas depois que isso acontecer ele vai ficar disponível sempre.
vc tem como interceptar o login do usuário? se sim, vc consegue criar esse UsuarioWeb logo depois que o usuário fizer o login, assim a instancia vai ficar funcionando pra sempre…
senão, tenta criar um método com @PostConstruct, isso talvez force o objeto a ser criado.
M
maaarkin
Opa lucas, é exatamente isso que está acontecendo, coloquei para que ele seja iniciado no construtor do IndexController(UsuarioWeb …) com isso ele força a inicialização e depois posso chamar em qualquer pagina.
mudei o codigo para o seguinte: (Pegar Usuario da sessao do Spring Security, e está funcionando perfeitamente.)
isso está ocorrendo pq ele esta tentando carregar o header.jsp antes do indexController, e está tentando pegar a sessao e nao está aberta a sessao. tem como resolver isso com o interceptor?
Lucas_Cavalcanti
o problema é que vc tem um repositorio (que é request scoped) dentro de um cara session scoped…
tenta carregar o usuário do banco já no construtor do UsuarioWeb, daí não vai ter problema.
M
maaarkin
no caso, eu coloco essa logica em algum controller e passa para usuario web? se sim, tem que ser um controller depois do login?
Lucas_Cavalcanti
o login é feito dentro do vraptor ou feito por outro cara (tipo o spring security)?
M
maaarkin
spring security
Lucas_Cavalcanti
bom, é só colocar a lógica de carregar o usuário no construtor do UsuarioWeb. Deve resolver.
M
maaarkin
Lucas, agora está funcionando corretamente, qualquer eventual erro, posto aqui novamente, agredeço e muito pelo suporte.