[RESOLVIDO]Tela Login

7 respostas
java
M

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.

7 Respostas

C

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

M

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.

M

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

C

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?

M

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.

C

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

M

Ok, valeu deu certo!

Criado 26 de fevereiro de 2016
Ultima resposta 1 de mar. de 2016
Respostas 7
Participantes 2