1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema com Sessão Vraptor4 , CDI e .WAR

Poderiam me ajudar, Tenho um projeto .war com Vraptor4, CDI e Wildfly8 e estou tendo problema com o usuário de sessão ( @SessionScoped ). A sessão no inicio trabalha normal sem problemas, porém se eu limpo o cache do navegador ele não guarda mais a sessão, sendo assim tenho que limpar os logs do servidor de aplicação para restartá-lo novamente. Será que o problema está em alguma configuração do wildfly? ou tem alguma configuração no CDI para um projeto .WAR?

Segue abaixo minhas classes:

Variavel de sessão:

package config;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import usuario.Usuario;

@SessionScoped
@Named
@SuppressWarnings("serial")
public class UsuarioSession implements Serializable {


    private Usuario usuario;

    public UsuarioSession() {
    }


    public Usuario getUsuario() {
        return usuario;
    }


    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public boolean isLogged() {
        return usuario != null;
    }

    public void logout() {
        usuario = null;
    }


}

Interceptor que verifica a sessão para redirecionar ao login caso não tenha:

package config;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import usuario.UsuarioController;
import br.com.caelum.vraptor.Accepts;
import br.com.caelum.vraptor.AroundCall;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.controller.ControllerMethod;
import br.com.caelum.vraptor.interceptor.SimpleInterceptorStack;


@Intercepts
@RequestScoped
public class UsuarioInterceptor {

    @Inject private Result result;
    @Inject private UsuarioSession usuarioSession;



     @AroundCall
        public void intercept(SimpleInterceptorStack stack) {
            if (usuarioSession.isLogged()) {
                    stack.next();
            } else {
                result.redirectTo(UsuarioController.class).login(null);
            }
        }


     @Accepts
        public boolean accept(ControllerMethod method) {
            return ( method.getMethod().isAnnotationPresent(RestrictAccess.class) );
        }


}

e os metodos de login, logout e validação no controller

@Inject private UsuarioProcess usuarioProcess;


    public UsuarioController() {
    }

@Path("/login")
    public void login( List<Object> errorlist ){
        setLogger("login()");

            if ( usuarioSession.isLogged() ) {
                result.redirectTo(PessoaController.class).inicio();
            }else{
                result.include(Attribute.ERROR_LIST,errorlist);
            }
    }


    @RestrictAccess
    @Path("/logout")
    public void logout(){
        setLogger("logout()");

        usuarioSession.logout();

        result.redirectTo(UsuarioController.class).login(null);
    }



    @SuppressWarnings("unchecked")
    public void validate(Usuario usuario){

        setLogger("validate()");

        mapObject.put(Attribute.MAP_OBJECT_OBJVO, usuario);

        mapResult = usuarioProcess.validate(mapObject);

        resultList = ( List<Object> ) mapResult.get(Attribute.RESULT_LIST);
        errorList = ( List<Object> ) mapResult.get(Attribute.ERROR_LIST);

        if( !validatorError() ){

            Usuario usuarioFind = (Usuario) resultList.get(0);
            usuarioSession.logout();
            usuarioSession.setUsuario( usuarioFind );
            result.redirectTo(PessoaController.class).inicio();
            usuarioFind = null;
        }else{

            usuarioSession.logout();
            result.redirectTo(UsuarioController.class).login(errorList);
        }

        usuarioProcess = null;
        destroyAttr();

    }
  • Você tem certeza que está limpando somente o cache ?

    rof20004   14 de set de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags wildfly cdi vraptor ou faça a sua própria pergunta.