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

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

[code]@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;
}[/code]

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

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

}
[/code]

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

[code]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."));		
}

}[/code]

a Classe Restrito

[code]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 {

}[/code]

Bom dia poste o interceptore a class Restrito por favor !

Abraços!

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.

Exatamente como o comentario acima cria uma class UserSession!

[code]@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;
}

}[/code]