Vraptor => sessÃo => dados se perdem ao sair do mÉtodo que o setou

3 respostas
P

Bom Dia, Pessoal
Por favor, onde será que estou pecando nesse aspécto?

@Resource
public class IndexController {
	private HttpServletRequest request;
	private Result result;
	private Usuario usuario;

	public IndexController(Result result, Usuario usuario,HttpServletRequest request) {
		this.result = result;
		this.usuario = usuario;
		this.request = request;
	}

AUTENTICAR ... E MONTAR A SESSÃO

@Path("/autenticar")	
	public void autenticar(Usuario usuario) {
		usuario = new UsuarioDao().validar(usuario);
		this.usuario = usuario;
		if (usuario.getId()!=null) {
                     usuario.setLogado(true);
                     this.result.redirectTo(this).raiz(); // REDIRECIONA PARA A PÁGINA PRINCIPAL DO SISTEMA
                }else{
                                this.usuario.setMsg(new Msg("Login não autorizado!"));
				this.result.redirectTo(this).login(usuario); // VOLTA PARA A PÁGINA DE LOGIN
              }
}

[color=red]Aqui, os valores setados na sessão, no método autenticar ... somem. ... somente aqui .. .ele não identifica estes dados no interceptor, depois ele funciona nos demais métodos/páginas e no interceptor[/color]

DETALHE: comentei o @Restrito do método raiz ... e ... os dados funcionam corretamente até no Interceptor

@Restrito
@Path("/raiz")	
public void raiz() {		
     //	montar menus e exibir a tela
}

}

PERDOE-ME ...receio sempre postar muito código para não cansar quem o lê, porém a pedido do Fabio Brotas ... eis ai:

package br.gov.sp.guarulhos.letrando.interceptor;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.gov.sp.guarulhos.letrando.controller.IndexController;
import br.gov.sp.guarulhos.letrando.infra.Restrito;
import br.gov.sp.guarulhos.letrando.modelo.Msg;
import br.gov.sp.guarulhos.letrando.session.Usuario;

@Intercepts
@RequestScoped
public class AutorizacaoInterceptor implements Interceptor {

	private Result result;
	private Usuario usuario;
	
	public AutorizacaoInterceptor(Result result, Usuario usuario){
		this.result = result;
		this.usuario = usuario;		
	}
	
	public boolean accepts(ResourceMethod method) {
		boolean teste;
		System.out.println("this.usuario.getLogado(): "+this.usuario.getLogado());
		try{
			teste = !this.usuario.getLogado();
		}catch (NullPointerException e) {
			teste = true;
		}
		
		return teste && method.containsAnnotation(Restrito.class);
	}

	public void intercept(InterceptorStack stack, ResourceMethod method,Object resourceInstance) 
	throws InterceptionException {
		this.result.redirectTo(IndexController.class).msg(new Msg(1, 0, "Erro de Sessao", "Ou voce nao acessou o sistema ou tua sessao expirou. Por gentileza, acesse o sistema pela tela de login."));		
	}
}

a Classe Restrito

package br.gov.sp.guarulhos.letrando.infra;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Restrito {

}

3 Respostas

F

Bom dia poste o interceptore a class Restrito por favor !

Abraços!

S

ola.
deixe os objetos que quer manter na sesão num objeto pai com annotação @component e @SessionScope e que todos implementem serialização.
não use redirect porque ele mata a sessão, use forwardto do vraptor.
espero ter ajudado.

F

Exatamente como o comentario acima cria uma class UserSession!

@Component
@SessionScoped
public class UserSession implements Serializable {
	 
	private static final long serialVersionUID = 1L;
	private Usuario user;
	
	public boolean isLogged() {
		 return user != null;
	}
		
    public void logout() {
		 user = null;
    }

	public Usuario getUser() {
		return user;
	}

	public void setUser(Usuario user) {
		this.user = user;
	}

    

}
Criado 14 de fevereiro de 2013
Ultima resposta 14 de fev. de 2013
Respostas 3
Participantes 3