Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro ao identificar usuário logado.

Olá,

Estou encontrando problema ao identificar o Usuário Logado na sessão;

Está apresentando erro no Casting do Usuário:

Segue o Código do filtro:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;

        //Cookie cookie = new Cookies(req.getCookies()).getUsuarioLogado();

        HttpSession sessao = req.getSession();
        Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuario.logado");

        String usuario = "<deslogado>";

        if (usuarioLogado != null) {
             usuario = usuarioLogado.getEmail();

        }

        System.out.println("Usuário "+ usuario + " acessando a URI " + req.getRequestURI());

        chain.doFilter(request, response);
    }
5 respostas

Olá Jeferson, tudo bem?

Se entendi corretamente, você está tendo ClassCastException na linha abaixo, seria isso mesmo?

 Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuario.logado");

Tenta verificar se na sua classe Login você fez o mapemaneto entre a chave "usuario.logado"com o objeto usuario. Se for por exemplo uma String que estiver no lugar do objeto usuário, nós teremos essa Exception uma vez que não é possível fazer o Casting de uma String para um objeto do tipo Usuário no getAttribute.

Espero que funcione

Abs

Tudo bem Rafael.

Correto, estou tendo uma ClassCastException.

Não entendi muito bem como fazer o mapeamento.

Estou anexando o código do filtro para que você possa me ajudar melhor Rafael.

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub

        PrintWriter writer = resp.getWriter();

        String email = req.getParameter("email");
        String senha = req.getParameter("senha");

        Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha); 

        if (usuario == null) {
            writer.println("<html><body>Usuário e senha inválida</body></html>");
        }else{
            HttpSession sessao = req.getSession();

            sessao.setAttribute("usuario.logado", email);
            writer.println("<html><body>Usuário logado: "+email+"</body></html>");
        }
    }
solução!

Olá Jeferson,

Acredito que o problema seja essa linha:

sessao.setAttribute("usuario.logado", email);

o valor que está sendo mapeado com a chave usuario.logado é do tipo String. Quando fazemos:

 Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuario.logado");

Estamos dizendo que o valor correspondente a chave "usuario.logado"é do tipo Usuario, mas nós os setamos previamente como sendo do tipo String. Dessa forma, não temos como fazer o Casting de um valor do tipo String para um objeto do tipo Usuario e por isso temos a Exception, tente realizar a troca:

sessao.setAttribute("usuario.logado", email);

por

sessao.setAttribute("usuario.logado", usuario);

Dessa forma, estamos passando o objeto usuario com a chave "usuario.logado", depois quando tentarmos pegar esse atributo, não devemos ter mais a Exception visto que setamos o objeto do tipo Usuário.

Espero que funcione

Abs

Rafael,

Funcionou!

O erro foi por falta de atenção, visto que o parâmetro está especificado que tem que ser (String, Objeto);

Obrigado.

De nada, qualquer dúvida estamos a disposição :)