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

Problema na Atenticação

Pessoal, estou com um problema nesta etapa. Minha autenticação não está funcionando. Implementei o código até o momento em que o login deveria redirecionar para a página de Lista de Empresas, ou retornar para o formulário. Mas, no meu caso, qualquer login acaba sendo aceito. Revisei o código mas não consegui encontrar o problema. Seguem os códigos das classes trabalhadas na aula: 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;
import br.com.alura.gerenciador.acao.AlteraEmpresa;
import br.com.alura.gerenciador.acao.ListaEmpresas;
import br.com.alura.gerenciador.acao.MostraEmpresa;
import br.com.alura.gerenciador.acao.NovaEmpresa;
import br.com.alura.gerenciador.acao.NovaEmpresaForm;
import br.com.alura.gerenciador.acao.RemoveEmpresa;

@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 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");
            return "redirect:entrada?acao=ListaEmpresas";
        } else {
            return "redirect:entrada?acao=LoginForm";

        }



    }

}

Usuario

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;
    }
}
3 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<>();
    private static List<Usuario> listaUsuarios = new ArrayList<>();
    private static Integer chaveSequencial = 1;

    static {
        Empresa empresa = new Empresa();
        empresa.setId(chaveSequencial++);
        empresa.setNome("Alura");
        Empresa empresa2 = new Empresa();
        empresa2.setId(chaveSequencial++);
        empresa2.setNome("Caelum");
        Banco.lista.add(empresa);
        Banco.lista.add(empresa2);

        Usuario u1 = new Usuario();
        u1.setLogin("Rodrigo");
        u1.setSenha("12345");
        Usuario u2 = new Usuario();
        u1.setLogin("Mauricio");
        u1.setSenha("12345");

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




}
solução!

Olá Rodrigo, tudo bem com você?

Dando uma olhada em seu código vi que tem um pequeno erro na parte de checar se o usuário é igual:

        if (this.login.equals(login)) {
            return false;
        }

Aqui faltou o ! para indicar que se trata de uma negação, dessa forma um usuário correto acionaria o false

Acredito que apenas isso estava impossibilitando, pode checar?

Abraços e Bons Estudos!

Oi geovani! Muito obrigado pela resposta. Era isso mesmo.

Abraços!