2
respostas

Problema na autenticação

Oi pessoal! Estou com um problema no momento da autenticação, toda vez que efetuar a entrada com login e senha, ele não entra mais na tela de "ListaEmpresa". Ele efetua a autenticação pelo Tomcat, mas sempre retorna para a página de autenticação. Já verifiquei tudo e não achei nenhuma diferença. Vocês podem me ajudar?

UnicaEntradaServlet

package br.com.alura.gerenciador.servlet;

import java.io.IOException;

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

import br.com.alura.gerenciador.acao.Acao;

@WebServlet("/entrada")
public class UnicaEntradaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String paramAcao = request.getParameter("acao");

        String nomeDaClasse = "br.com.alura.gerenciador.acao." + paramAcao;

        String nome;
        try {
            Class classe = Class.forName(nomeDaClasse); 
            Acao acao = (Acao) classe.newInstance();
            nome = acao.executa(request, response);
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | ServletException
                | IOException e) {
            throw new ServletException(e);
        }

        String[] tipoEENdereco = nome.split(":");
        if (tipoEENdereco[0].equals("forward")) {
            RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/" + tipoEENdereco[1]);
            rd.forward(request, response); 

        } else {
            response.sendRedirect(tipoEENdereco[1]);
        }

//        String nome = null;
//        if (paramAcao.equals("ListaEmpresas")) {
//            ListaEmpresas acao = new ListaEmpresas();
//            nome = acao.executa(request, response);
//
//        } else if (paramAcao.equals("RemoveEmpresa")) {
//            RemoveEmpresa acao = new RemoveEmpresa();
//            nome = acao.executa(request, response);
//
//        } else if (paramAcao.equals("MostraEmpresa")) {
//            MostraEmpresa acao = new MostraEmpresa();
//            nome = acao.executa(request, response);
//
//        } else if (paramAcao.equals("AlteraEmpresa")) {
//            AlteraEmpresa acao = new AlteraEmpresa();
//            nome = acao.executa(request, response);
//
//        } else if (paramAcao.equals("NovaEmpresa")) {
//            NovaEmpresa acao = new NovaEmpresa();
//            nome = acao.executa(request, response);
//            
//        }else if (paramAcao.equals("NovaEmpresaForm")) {
//            NovaEmpresaForm acao = new NovaEmpresaForm();
//            nome = acao.executa(request, response);
//        }

    }

}

Login

package br.com.alura.gerenciador.acao;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.alura.gerenciador.modelo.Banco;
import br.com.alura.gerenciador.modelo.Usuario;

public class Login implements Acao {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

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

        System.out.println("Logando " + login);

        Banco banco = new Banco();
        Usuario usuario = banco.existeUsuario(login, senha);

        if (usuario != null) {
            System.out.println("Usuario existe");
            HttpSession sessao = request.getSession();
            sessao.setAttribute("usuarioLogado", usuario);
            return "redirect:entrada?acao=ListaEmpresas";
        } else {
            return "redirect:entrada?acao=LoginForm";
        }

    }

}

Usuário

package br.com.alura.gerenciador.modelo;

public class Usuario {

    private String login;
    private String senha;

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public boolean ehIgual(String login, String senha) {
        if(!this.login.equals(login)) {
            return false;
        }

        if(!this.senha.equals(senha)) {
            return false;
        }

        return true;
    }
}

2 respostas

Banco

package br.com.alura.gerenciador.modelo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Banco {

    private static List<Empresa> lista = new ArrayList<Empresa>();
    private static List<Usuario> listaUsuarios = new ArrayList<Usuario>();
    private static Integer chaveSequencial = 1;

    static {
        Empresa empresa = new Empresa();
        empresa.setId(chaveSequencial++);
        empresa.setNome("Google");
        Empresa empresa2 = new Empresa();
        empresa2.setId(chaveSequencial++);
        empresa2.setNome("Bancorbras");
        lista.add(empresa);
        lista.add(empresa2);

        Usuario u1 = new Usuario();
        u1.setLogin("Leonardo");
        u1.setSenha("12345");
        Usuario u2 = new Usuario();
        u2.setLogin("Amanda");
        u2.setSenha("45678");

        listaUsuarios.add(u1);
        listaUsuarios.add(u2);
    }

    public void adiciona(Empresa empresa) {
        empresa.setId(Banco.chaveSequencial++);
        Banco.lista.add(empresa);
    }

    public List<Empresa> getEmpresas() {
        return Banco.lista;
    }

    public void removeEmpresa(Integer id) {

        Iterator<Empresa> it = lista.iterator();

        while (it.hasNext()) {
            Empresa emp = it.next();

            if (emp.getId() == id) {
                it.remove();
            }
        }
    }

    public Empresa buscaEmpresaPelaId(Integer id) {
        for (Empresa empresa : lista) {
            if(empresa.getId() == id) {
                return empresa;
            }
        }
        return null;
    }

    public Usuario existeUsuario(String login, String senha) {
        for(Usuario usuario : listaUsuarios) {
            if(usuario.ehIgual(login, senha)) {
                return usuario;
            }
        }
        return null;
    }

}

Olá Leonardo, tudo bem com você?

Dando uma olhada no seu código não há nada de errado, eu inclusive achei estranho e peguei o projeto do curso, e troquei o código do instrutor pelo seu, e continuou funcionando

Acredito que o problema esteja dentro da sua .jsp, provavelmente passando um name inválido, você pode estar conferindo se está:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:url value="/entrada" var="linkEntradaServlet"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

    <form action="${linkEntradaServlet }" method="post">

        Login: <input type="text" name="login"  />
        Senha: <input type="password" name="senha"  />    
        <input type="hidden" name="acao" value="Login">
        <input type="submit" />
    </form>

</body>
</html>

Você pode estar conferindo?

Abraços e Bons Estudos!