[RESOLVIDO]Tela Login

Estou com um erro para autenticar o usuário no meu sistema, ele não diferencia um login e senha, por exemplo:

Login e senha do banco:

Login: admin
Senha: admin

Se digitar:
Login: Admin
Senha: admin

O usuário é autenticado e é redirecionado para a página principal.

Estou usando HQL para pesquisa do usuário.

Segue código abaixo:

(AutenticaBean)
// Método que autentica o usuário
public void autenticar() {
try {
FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
//Recebe login e senha do usuário e chama método DAO para autenticar
funcionarioLogado = funcionarioDAO.autenticar(funcionarioLogado.getLogin(), DigestUtils.md5Hex(funcionarioLogado.getSenha()));
//Verifica se o funcionário é nulo ou diferente
if (funcionarioLogado == null) {
FacesUtil.adicionaMensagemErro(“Usuário ou senha inválidos.”);
} else {
//Redireciona para página principal após autenticar o funcionário.
FacesContext.getCurrentInstance().getExternalContext().redirect(“principal.xhtml”);
}
} catch (RuntimeException ex) {
FacesUtil.adicionaMensagemErro("Erro ao tentar autenticar no sistema: " + ex.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
}

DAO
//Método que autentica o funcionário com login e senha
public Funcionario autenticar(String login, String senha) {
//Cria a sessão
Session sessao = HibernateUtil.getSessionFactory().openSession();
Funcionario funcionario = null;

	try {
		//Executa a query de consulta
		Query consulta = sessao.getNamedQuery("Funcionario.logar");
		//Recebe os dados informados
		consulta.setString("login", login);
		consulta.setString("senha", senha);
		//Cria consulta do funcionário
		funcionario = (Funcionario) consulta.uniqueResult();
	} catch (RuntimeException ex) {
		throw ex;
	} finally {
		sessao.close();
	}
	return funcionario;
}

}

Entidade Funcionario
@Entity
@NamedQueries({ @NamedQuery(name = “Funcionario.listar”, query = “SELECT funcionario FROM Funcionario funcionario”),
@NamedQuery(name = “Funcionario.buscarPorCodigo”, query = “SELECT funcionario FROM Funcionario funcionario WHERE funcionario.codigo = :codigo”),
@NamedQuery(name = “Funcionario.logar”, query = “SELECT funcionario FROM Funcionario funcionario WHERE funcionario.login = :login AND funcionario.senha = :senha”),
@NamedQuery(name = “Funcionario.esqueciSenha”, query = “SELECT funcionario FROM Funcionario funcionario WHERE funcionario.email =:email”)})
@Table(name = “tbl_funcionario”)
public class Funcionario {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = “fun_codigo”, nullable = false)
private Long codigo;

@NotEmpty(message = "O campo nome é obrigatório.")
@Column(name = "fun_nome", nullable = false, length = 50)
private String nome;

@NotEmpty(message = "O campo data de nascimento é obrigatório.")	
@Column(name = "fun_dt_nasc", nullable = false)
private String dt_nasc;

@NotEmpty(message = "O campo cpf é obrigatório.")
@Column(name = "fun_cpf", nullable = false, length = 14, unique = true)
private String cpf;

@NotEmpty(message = "O campo usuário é obrigatório.")
@Column(name = "fun_login", nullable = false, length = 45)
private String login;

@NotEmpty(message = "O campo email é obrigatório")
@Column(name = "fun_email", nullable = false, length = 120)
private String email;

@NotEmpty(message = "O campo senha é obrigatório.")
@Column(name = "fun_senha", nullable = false, length = 50)
private String senha;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "tbl_permissao_per_codigo", nullable = false)
private Permissao permissao;

// Criando Get e Set
public Long getCodigo() {
	return codigo;
}

public void setCodigo(Long codigo) {
	this.codigo = codigo;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getDt_nasc() {
	return dt_nasc;
}

public void setDt_nasc(String dt_nasc) {
	this.dt_nasc = dt_nasc;
}

public String getCpf() {
	return cpf;
}

public void setCpf(String cpf) {
	this.cpf = cpf;
}

public String getLogin() {
	return login;
}

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

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public String getSenha() {
	return senha;
}

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

public Permissao getPermissao() {
	return permissao;
}

public void setPermissao(Permissao permissao) {
	this.permissao = permissao;
}

Alguém pode me ajuda a fazer com que o usuário seja validado conforme login e senha cadastrado no banco, ele tem que diferenciar as maiúsculas e minúsculas.

Obrigado.

coloque um breackpoint no if que verifica o usuario, e veja qual o retorno.

Já debugei várias vezes… os valores que recebe do usuário e do banco de dados, mesmo sendo diferente ele passa e manda para a página principal.

Segue em anexo o arquivo com os prints e comentários do debugger.Debugger.docx (474.4 KB)

Bom dia,

O seu problema esta na comparação do If.
A instancia de “funcionarioLogado” nunca sera null.
Qual o banco de dados que voce esta usando?

Estou usando Mysql, o funcionarioLogado será null quando o valor que for passado pelo o usuário for diferente do banco ele retorna null para o funcionarioLogado.

Veja esse tutorial e olhe a configuração do seu Mysql.

Ok, valeu deu certo!