2
respostas

Validação da autenticação pela classe SistemaInterno

Ele criou a classe AutenticacaoUtil para nao repetir código, até ai ok, uma duvida que tenho é, na Classe Sistema interno temos o código abaixo (mudei só o nome do parametro e os print):

public class SistemaInterno {
    private int senha ;

    public void autentica (Autenticavel au) {
        boolean autenticou = au.autentica(this.senha);
        if (autenticou) {
            System.out.println("Bem vindo ao Bytebank, você está logado no sistema." );

    }else { System.out.println("senha incorreta, você tem mais 2 tentativas...");
    }

No caso teremos objetos diferentes sendo validados num só lugar, mas minha dúvida é como vou setar uma senha para ser comparada pela classe AutenticacaoUtil? Se o valor é padrão para todos os objetos ta sendo um só que ta sendo setado na classe SistemaInterno.

Para esclarecer, eu quero que o autentica tenha valores diferentes para cada objeto pois, a senha do administrador não é mesma do gerente por exemplo. Eu quero definir uma senha especifica para cada objeto criado, ele não especifica isso no vídeo, deixei o atributo senha da classe SistemaInterno em branco para poder setar direto no objeto, mas ta dando errado.

Meu código sempre da que a senha ta invalida, pq ta comparando com um valor dentro da classe SistemaInterno ( vou deixar a classe de teste e a classe do AutenticadorUtil que eu nomeei de AutenticadorObj):

Autenticador para nao repetir o código:

public  class AutenticadorObj {

    private int senha;

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


    public boolean autentica(int senha) {
        if(this.senha==senha) {
            return true;
        }
        else {return false;
        }
    }
}

Classe que testa o Sistema ( eu tento criar uma senha e usar o autentica do objeto com as mesma senha pra receber a mensagem de bem vindo, mas recebo a de senha invalida

public class TestaSistema
{
    public static void main(String[] args) {

        Cliente cliente = new Cliente();
        cliente.setSenha(256);
        cliente.autentica(256);

        SistemaInterno si = new SistemaInterno();

        si.autentica(cliente);





    }
}
2 respostas

Se você deixar a classe SistemaInterno sem inicializar o atributo senha ele vai ficar com o valor default, por isso só vai conseguir acessar o sistema se você usar a senha com o valor zero. Se você quer criar uma senha para cada tipo de funcionário você pode criar 3 atributos senha na classe Sistema interno e no if você vai mudar a condição para autenticar para cada uma das senhas, dessa forma:

public class SistemaInterno {

    private int senhaGerente = 2222;
    private int senhaAdministrador = 3333;
    private int senhaCliente = 1111;

    public void autentica(Autenticavel fa) {
        if(fa.autentica(this.senhaGerente) |
                fa.autentica(this.senhaAdministrador) |
                fa.autentica(this.senhaCliente)) {
            System.out.println("Pode entrar no sistema!");
        } else {
            System.out.println("Não pode entrar no sistema!");
        }
    }

}

Essa solução ainda não está completa pois permite um cliente entrar com senha de administrador, caso seja configurada a senha do cliente como 3333.

Eu queria mesmo que cada objeto fosse inicializado com uma senha padrão, mas acho que não é a intenção desse curso chegar tão longe né, espero que os cursos adiante ensinem isso, obrigado pela ajuda