3
respostas

Cookie no Cliente nao aparece

Olá, pessoal. Fiz todas as modificacoes nas classes Login, Logout, FiltroDeAuditoria mas nao aparece no Cookie (quando visto pelo navegador) o JSessionId. Continua a mostrar o o mail do login. Alias, tenho tido muitas dificuldades em fazer o curso uma vez que tenho acompanhado e feito tudo tal qual explicado mas os resultados em termos de navegador (cookies) nao tem sido condizentes. Entao jogo as duvidas no Forum mas demoram a serem respondidas e tenho eu mesmo tentado sanar minhas duvidas. O que tem me demandado um tempo absurdo para finalizar este curso. Nao sei, mas penso que este curso nao esta bem estruturado. Segue minhas classes: Login:

@WebServlet(urlPatterns="/login")
public class Login extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        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 ou senha inválida!!!</body></html>");
        }
        else {
//            Cookie cookie = new Cookie("usuario.logado", email);
//            resp.addCookie(cookie);
            HttpSession session = req.getSession();
            session.setAttribute("usuario.logado", usuario);
            writer.println("<html><body>Usuário logado: " + email + "</body></html>");
        }


    }
}

Logout:

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//        Cookie cookie = new Cookies(req.getCookies()).getUsuarioLogado();
//        
//        if (cookie == null) {
//            writer.println("<html><body>Usuario nao estava logado!<body></html>");
//        }
//        cookie.setMaxAge(0);
//        resp.addCookie(cookie);

        HttpSession session = req.getSession();
        session.removeAttribute("usuario.logado");

        PrintWriter writer = resp.getWriter();
        writer.println("<html><body>Deslogado com sucesso!</body></html>");
    }

}

FiltroDeAuditoria

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

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;

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

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

        String usuario = "<deslogado>";

//        if (cookie != null) {
//            usuario = cookie.getValue();
//        }
        if (usuarioLogado != null) {
            usuario = usuarioLogado.getEmail();
        }

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

    private Cookie getUsuario(HttpServletRequest req) {
        Cookie[] cookies = req.getCookies();
        if (cookies == null) {
            return null;
        }

        for (Cookie cookie: cookies) {
            if (cookie.getName().equals("usuario.logado")) {
                return cookie;
            }
        }

        return null;
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

Navegador (Firefox. Mas em todos os outros e a mesma coisa):

RequestCookies
usuario.logado    guilherme.silveira@alura.com.br
3 respostas

Opa, o seu debug garantiu que aquele código do session.setAttribute está sendo executado? Pq realmente é estranho que vocÊ tenha colocado algo na session e jsessionid não tenha ido no cookie. É ainda mais estranho que tenha aparecido no cookie uma chave usuario.logado, já que isso deveria ficar apenas no servidor.

Olá Alberto. Realmente. No entanto, a partir de um dado momento o jsessionid comecou a aparecer. Tem ocorrido de eu fazer atualizacoes no codigo e estas na aparecerem na execucao. Ressalte-se que apos cada atualizacao eu reinicio o servidor. Passei entao a dar um Build all no projeto. Dai, aparentemente passou-se a atualizar as modificacoes. Talvez tenha sido por isto que o jsesssionid comecou a ser listado. O que voce acha?

É uma possibilidade. Apesar que o build automático já vem habilitado... Talvez tivesse desabilitado isso na sua ide.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software