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

Erro ao identificar usuário logado

Estou com o seguinte problema: apesar de logar corretamente, continua aparecendo usuário deslogado:

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Usuário deslogado acessando a URI /gerenciador/

Classe Login:

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.alura.gerenciador.Usuario;
import br.com.alura.gerenciador.dao.UsuarioDAO;

@WebServlet(urlPatterns = "/login")
public class Login extends HttpServlet {


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String email = req.getParameter("email");
        String senha = req.getParameter("senha");
        Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha);
        PrintWriter writer = resp.getWriter();
        if(usuario==null) {
            writer.println("<html><body>Usuário inválido</html></body>");
        } else {
            HttpSession session = req.getSession();
            session.setAttribute("Usuario.logado", usuario);
            writer.println("<html><body>Usuário logado: " + email + "</body></html>");
        }
    }
}

Classe Logout:

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Usuario;

@WebServlet(urlPatterns = "/logout")
public class Logout extends HttpServlet {


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().removeAttribute("usuario.logado");        
        PrintWriter writer = resp.getWriter();
        writer.println("<html><body>Deslogado com sucesso</html></body>");
    }

}

Classe FiltroDeAuditoria:

package br.com.alura.gerenciador.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import br.com.alura.gerenciador.Usuario;

@WebFilter(urlPatterns = "/*")
public class FiltroDeAuditoria implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        String uri = req.getRequestURI();
        String usuario = getUsuario(req);

        System.out.println("Usuário " + usuario + " acessando a URI " + uri);
        chain.doFilter(request, response); 
    }

    private String getUsuario(HttpServletRequest req) {
        Usuario usuario = (Usuario) req.getSession().getAttribute("usuario.logado");
        if(usuario==null) return "<deslogado>";
        return usuario.getEmail();
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}

index.html:

<html>
<body>
Bem vindo ao nosso gerenciador de empresas!<br/>
<form action="novaEmpresa" method="POST">
    Nome: <input type="text" name="nome" /><br />
    <input type="submit" value="Enviar" />
</form>

<form action="login" method="POST">
    Email: <input type="email" name="email" />
    Senha: <input type="password" name="senha" />
    <input type="submit" value="Enviar" />
</form>

<form action="logout" method="POST">
    <input type="submit" value="Deslogar" />
</form>

</body>
</html>
3 respostas
solução!

Fala aí Felipe blz?

Cara dei uma olhada aqui no seu código e percebi uma coisa. Na sua servlet de Login você está setando um atributo com a seguinte instrução:

session.setAttribute("Usuario.logado", usuario);

Com a string "Usuario.logado" com a inicial do usuário maiúscula.

E nas demais servlets você está referenciando com a inicial minúscula "usuario.logado":

//Servlet de Logout
req.getSession().removeAttribute("usuario.logado");
//Filtro de auditoria
req.getSession().getAttribute("usuario.logado");

Altere essa string na servlet de Login para minúsculo e veja se somente isso resolve o problema.

Obrigado Fernando, era esse mesmo o problema! Valeu pela ajuda.

Opa, precisando manda aí =)