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

Dúvida no Ex. 1 da Aula 6 - Manipulando cookies existentes

Bom dia galera.

estou tendo um problema quando criei a classe Cookies, estou recebendo HTTP Status 404:

HTTP Status 404 -

type Status report

message

description The requested resource is not available.

Apache Tomcat/7.0.67

Segue o código:

Login

package br.com.alura.gerenciador.web;

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

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;
import br.com.alura.gerenciador.dao.UsuarioDAO;

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

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

        new UsuarioDAO().adicionaUsuario(email, senha);

        PrintWriter writer = response.getWriter();

        Usuario usuarioBuscado = new UsuarioDAO().buscaPorEmailESenha(email, senha);
        writer.println("<html>");
        if (usuarioBuscado != null) {
            Cookie cookieCriado = new Cookie("usuario.logado", email);
            response.addCookie(cookieCriado);
            writer.println(email+"<p> bem vindo!");
        }

        // ===========botao voltar==========

        writer.println("<form action='./' method='post'>");
        writer.println("<input type='submit' value='Voltar' /><br>");
        writer.println("</form>");
        writer.println("</html>");
        // =================================


    }


}

FiltroDeAuditoria

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.util.Iterator;

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 javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@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;

        String usuarioLogado = "Visitante";
        Cookie[] listaDeCookies = req.getCookies();
        if (listaDeCookies !=null) {
            Cookie cookieUsuarioLogado = new Cookies(listaDeCookies).getUsuarioLogado();
            usuarioLogado=cookieUsuarioLogado.getValue();
        }


        System.out.println(usuarioLogado+ " acessando a URI "
                + req.getRequestURI());
        chain.doFilter(request, response);

    }

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

    }

}

Cookies

package br.com.alura.gerenciador.web;

import javax.servlet.http.Cookie;

public class Cookies {

    private final Cookie[] cookies;

    public Cookies(Cookie[] cookies) {
        this.cookies = cookies;
    }

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

}
2 respostas
solução!

Rodrigo , Bom dia !

realizei algumas mudança na sua classe de login segue a mudança :

@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 ou Senha Inválido! Tente novamente</body></html>");
        else {
            writer.println("<html><body>Usuário Logado: " + email + "</body></html>");
            HttpSession session = req.getSession();
            session.setAttribute("usuarioLogado", usuario);
        }

    }



}

e na sua classe FiltroDeAuditoria , realizei outras mudanças também :

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 usuario = getUsuario(req);            
                System.out.println("Usuário "+ usuario + " Acessando a URL " + req.getRequestURI());

                chain.doFilter(request,response);
    }

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

    private String getUsuario(HttpServletRequest req) {

        HttpSession session = req.getSession();
        Usuario usuarioLogado = (Usuario) session.getAttribute("usuarioLogado");
        if (usuarioLogado == null) return "<deslogado>";
        return usuarioLogado.getEmail();
    }
}

veja se assim será possivel o acesso a tela de login .,

espero ter ajudado .

Celso,

Obrigado pela ajuda. Funcionou mas como o Session, com o cookie nao consegui funcionar, vou continuar o adamento, pois acredito que a manipulação direta pelo cookie não é muito aplicada.

Obrigado mais uma vez