VRaptor 3 - Problema com objeto em sessão

10 respostas
apoklypse
boa tarde estou tentanto salvar um objeto em sessão implementei minha classe de Sessão Assim:
package b2ti.gis.session;

import br.com.b2ti.entity.Usuario;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
import java.io.Serializable;

/**
 *
 * @author user
 */
@Component
@SessionScoped
public class SessionUsuario implements Serializable{

   private static final long serialVersionUID = 1L;

   private Usuario usuario;

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

}

tenho o seguinte controller:

package b2ti.gis.controller;

import b2ti.gis.session.SessionUsuario;
import br.com.b2ti.entity.LoginSistema;
import br.com.b2ti.entity.Unidade;
import br.com.b2ti.entity.Usuario;
import br.com.b2ti.exception.RepositoryException;
import br.com.b2ti.process.ManterLoginSistema;
import br.com.b2ti.util.Criptografia;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.caelum.vraptor.view.Results;
import br.com.psflib.process.ManterMunicipioPSFUnidade;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hamcrest.Matchers.*;

/**
 *
 * @author user
 */
@Resource
public class HomeController {

    private final Result result;
    private final Validator validator;
    private  ManterLoginSistema dao;
    private  SessionUsuario usuarioInfo;
   
    public HomeController(Result result, Validator validator, SessionUsuario usuarioInfo) {
        this.dao = new ManterLoginSistema();
        this.result = result;
        this.validator = validator;
        this.usuarioInfo = usuarioInfo;
    }

    @Post
    public void login(String login, String senha, String unidade) {
        LoginSistema sistema = null;
        Unidade unidadePsf = new Unidade(Integer.parseInt(unidade));
        try {
            sistema = dao.RelizarLogin(login, Criptografia.SHA_1(senha));
        } catch (RepositoryException ex) {
            Logger.getLogger(HomeController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(HomeController.class.getName()).log(Level.SEVERE, null, ex);
        }
        final Usuario currentUser = sistema == null ? null : sistema.getUsuarioId();
        if (currentUser == null) {
            validator.add(new ValidationMessage("erro", "Usuario invalido"));
        } else if (!currentUser.getUnidadeList().contains(unidadePsf)) {
            validator.add(new ValidationMessage("erro", "Usuario não pertende a unidade"));
        }
        this.validator.onErrorUse(Results.page()).of(ErroController.class).erro();
        this.usuarioInfo.setUsuario(currentUser);
        this.result.use(Results.logic()).redirectTo(PrincipalController.class).home();
    }
   

    @Get
    public void login() {

    }

    public void logout() {
        this.result.use(Results.logic()).redirectTo(IndexController.class).index();
    }
}

meu problema é o SessionUsuario nunca fica armazenado em sessao, mesmo eu colocando um @Component e @SessionScoped quando uso qualquer interceptador SessionUsuario vem em branco, o que estou fazendo de errado?

10 Respostas

Lucas_Cavalcanti

faça um teste básico:

-no interceptor imprima o usuário
-em uma lógica qqer, sete o usuario pra qqer valor
-veja se tá funcionando…

D

e ae blz.?!

cara… estou com o mesmo problema… o objeto nao fica setado com os valores na sessao…
voce conseguiu resolver!!! tem como passar a solucao…?

vlw.

Lucas_Cavalcanti

tenta imprimir a instância do SessionUsuario pra ver se é a mesma

Andre_Brito

Pessoal, tive um problema parecido. Tentem mudar pra ApplicationScoped pra ver se tem alguma diferença. Se não tem, é algum bug (que nem sei se pode ser chamado de bug) parecido com o meu. Não é bug do VRaptor, é algum problema que tem com Linux, Tomcat ou Eclipse. Meu tópico é recente, está aqui.

H

Lucas aproveitando esse tópico , poderia me ajudar , pelo que sei a sessão da para setar nas tags <session-config> dentro do web.xml que o tomcat vai controlar isso certo ?
eu testei essas tags e não funcionou, pelo que eu vi o pessoal resolve esse problema de sessão via código mesmo…

As tags …
<session-config>
<session-timeout>120</session-timeout>
</session-config>

Não Funciona?

Lucas_Cavalcanti

essa configuração é o tempo que a sessão vai ser morta se ficar ociosa…

o que vc queria configurar?

H

Então eu queria configurar o tempo para cada usuário logado, ou seja quando o usuário logar ele tem um tempo para ficar no site depois desse tempo expira…
e ele tem que logar novamente.

Lucas_Cavalcanti

o session timeout é só se o cara ficar ocioso… se ele estiver usando o sistema ativamente o timeout não vai funcionar do jeito que vc está querendo

H

Então eu tenho que criar uma classe para controlar quando o usuário logar setar o tempo que ele pode ficar logado.

Lucas_Cavalcanti

isso… vc pode controlar isso com o SessionUsuario e um interceptor que invalida a sessão caso passou tempo demais, por exemplo

Criado 6 de setembro de 2010
Ultima resposta 3 de jun. de 2011
Respostas 10
Participantes 5