/** * Metodo de Autenticacao de Usuario * * @param login * @param senha * @return */ public Usuario autentica(String login, String senha) throws Erro { log("Autenticando " + getNomeEntidade()); Usuario u = new Usuario(); u.setLogin(login); Usuario usuarioRecuperadoDoBD = new Usuario(); usuarioRecuperadoDoBD = getFinder().findByLogin(u.getLogin()); // Primeiro verificamos se o usuario existe. if (existe(usuarioRecuperadoDoBD)) { // Verificamos se usuario e senha informado batem com o banco. boolean usuarioConfere = (login.equals(usuarioRecuperadoDoBD.getLogin()) && senha.equals(usuarioRecuperadoDoBD.getSenha())); boolean usuarioEstaBloqueado = !(usuarioRecuperadoDoBD.getStatus() == null || !usuarioRecuperadoDoBD .getStatus() .equals(EnumUsuarioAutenticado.USUARIO_BLOQUEADO)); boolean ehFinalDeSemana = UtilsData.ehFinalDeSemana(); boolean ehHorarioComercial = UtilsData.ehHorarioComercial(); boolean ehAdm = ehAdm(usuarioRecuperadoDoBD); boolean usuarioPodeAcessar = usuarioConfere && ((!usuarioEstaBloqueado && !ehFinalDeSemana && ehHorarioComercial) || ehAdm); if (usuarioPodeAcessar) { log(getNomeEntidade() + " autenticado com sucesso"); } else if (!usuarioConfere) { log(getNomeEntidade() + " informado com senha inválida..."); usuarioRecuperadoDoBD.setContadorSenhaInvalida( usuarioRecuperadoDoBD.getContadorSenhaInvalida() + 1); boolean avisaUsuarioBloqueioNoProximoErro = (3 - usuarioRecuperadoDoBD.getContadorSenhaInvalida()) == 1; trataSenhaInvalidaDoUsuario(usuarioRecuperadoDoBD); if (avisaUsuarioBloqueioNoProximoErro) { throw new ErroNegocio( EnumUsuarioAutenticado.SENHA_INVALIDA_ULTIMA_TENTATIVA.getMensagem()); } else { throw new ErroNegocio(EnumUsuarioAutenticado.SENHA_INVALIDA.getMensagem()); } } else if (usuarioEstaBloqueado) { throw new ErroNegocio(EnumUsuarioAutenticado.USUARIO_BLOQUEADO.getMensagem()); } else if (ehFinalDeSemana) { throw new ErroNegocio(EnumUsuarioAutenticado.FINAL_DE_SEMANA.getMensagem()); } else if (!ehHorarioComercial) { throw new ErroNegocio(EnumUsuarioAutenticado.FORA_DO_HORARIO_COMERCIAL.getMensagem()); } } else { log(EnumUsuarioAutenticado.USUARIO_INEXISTENTE.getMensagem()); throw new ErroNegocio(EnumUsuarioAutenticado.USUARIO_INEXISTENTE.getMensagem()); } return usuarioRecuperadoDoBD; }
private void trataSenhaInvalidaDoUsuario(Usuario usuarioRecuperadoDoBD) { int numeroDeChancesRestantes = 3 - usuarioRecuperadoDoBD.getContadorSenhaInvalida(); boolean deveBloquearUsuario = numeroDeChancesRestantes == 0; if (deveBloquearUsuario) { usuarioRecuperadoDoBD.setStatus(EnumUsuarioAutenticado.USUARIO_BLOQUEADO); } getDAO().atualizar(usuarioRecuperadoDoBD); }