Como verificar usuario e senha em uma tela de login usando Hibernate

Olá!

Estou com uma pequena dúvida de como fazer para verificar se a senha pertence ao usuario e vice-versa em uma tela de login.
Estou usando o Hibernate com Netbeans e Banco SQL Server 2008

Na tela de login tenho o seguinte código no botão entrar:

if (txUsuario.getText().isEmpty() || Password.getPassword().length == 0) { JOptionPane.showMessageDialog(this, "Não é possível efetuar login com campos vazios!"); } else { try { usuarios = UsuarioDAO.fabricaUsuarioDAO().BuscaSenhaELogin(txUsuario.getText(), Password.getPassword()); //Neste if preciso informa se usuario e senha conferem. if () { JOptionPane.showMessageDialog(this, "SEJA BEM VINDO AO SISTEMA!"); TelaPrincipal CodTelaPrincipal = new TelaPrincipal(); CodTelaPrincipal.setVisible(true); dispose(); } else { JOptionPane.showMessageDialog(this, "Usuário e/ou senha incorreto(s)!"); } } catch (Exception e) { JOptionPane.showMessageDialog(this, "Erro ao efetuar login! Causa: " + e); } } }

Neste metodo BuscaSenhaELogin fica na UsuarioDAO, eis o codigo:

public List<Usuario> BuscaSenhaELogin(String usuario, char[] senha) { String VerificacaoLogin = "FROM Bibliotecario WHERE TxLogin like '" + usuario + "'and NuSenhaAcesso like'" + senha + "'"; return getSession().createQuery(VerificacaoLogin).list(); }

E aí como faço?
Agradeço. :smiley:

Olá! :smiley:

Este codigousuarios.size() < 0 está me retornando a mensagem do else do metodo. ou seja, mesmo se o usuario e senha estiverem corretos ele não entra.

Como faço para comparar que o usuario pertence a senha digitada?

Existe algo errado neste metodo?

public List<Usuario> BuscaSenhaELogin(String usuario, char[] senha) { String VerificacaoLogin = "FROM Bibliotecario WHERE TxLogin like '" + usuario + "'and NuSenhaAcesso like'" + senha + "'"; return getSession().createQuery(VerificacaoLogin).list(); }

Bem… Se no teste usuarios.getSize() ele vai bater no else então é porque o banco não tá retornando nada…
Sobre o buscaSenhaELogin() aparentemente está correto, as únicas coisas que questiono é que você poderia usar uniqueResult() para retornar apenas um resultado em vez de list(), a outra coisa é: pra quê usar um array de char se uma String dá no mesmo? Se você tivesse limitando o tamanho da string ainda seria entendível isso mas como não está então pode passar String usuario, String senha sem problemas…

Olá!
Fiz as alterações que informou e ficou o seguinte:

public List<Usuario> BuscaSenhaELogin(String usuario, char[] senha) { String VerificacaoLogin = "FROM Bibliotecario WHERE TxLogin like '" + usuario + "'and NuSenhaAcesso like'" + senha + "'"; return (List<Usuario>) getSession().createQuery(VerificacaoLogin).uniqueResult(); }

Tive que deixar o char[] senha, pois no método do botão que entra no sistema reclamou.
Veja o código do botao:

private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (txUsuario.getText().isEmpty() || Password.getPassword().length == 0) { JOptionPane.showMessageDialog(this, "Não é possível efetuar login com campos vazios!"); } else { try { //reclamou neste variavel aqui. usuarios = UsuarioDAO.fabricaUsuarioDAO().BuscaSenhaELogin(txUsuario.getText(), Password.getPassword()); if (usuarios.size() > 0) { JOptionPane.showMessageDialog(this, "SEJA BEM VINDO AO SISTEMA!"); TelaPrincipal CodTelaPrincipal = new TelaPrincipal(); CodTelaPrincipal.setVisible(true); dispose(); } else { JOptionPane.showMessageDialog(this, "Usuário e/ou senha incorreto(s)!"); } } catch (Exception e) { JOptionPane.showMessageDialog(this, "Erro ao efetuar login! Causa: " + e); } } }

Quando rodei tive o seguinte resultado:
[color=red] java.lang.NullPointer.Exception[/color]
Por que? Consegui visualizar algo que retorna nulo?

Password.getPassword() ??? Pelo o que eu entendi ‘txUsuario’ e ‘Password’ são as variáveis que representam os campos de texto na tela certo? Então se você quer pegar o valor que está no campo ‘Password’ você tem que usar o método getText() também pois esse método é o que faz você obter o valor do JTextField, ok? Provavelmente deu null porquê ele tentou chamar esse método aí (getPassword()) e esse métódo não existe para essa variável (Password) que é um JTextField, entendeu? =)

Algumas dicas:

[list]Tem horas que você foge do padrão de escrita de código, lembre-se: nomes de métodos começam sempre em minúsculo. Errado: BuscaSenhaELogin(), Certo: buscaSenhaELogin()[/list]
[list]Mesma coisa pra variáveis. Errado: Password, VerificacaoLogin, Certo: password, verificacaoLogin[/list]
[list]Não sei se você está usando algum framework de persistência como Hibernate ou JPA, essas ferramentas ajudam muito a agilizar a forma de mexer no banco de dados, na maioria das vezes ausentando você de usar essas consultas SQL no código… Se tiver usando, dá uma olhada na API Criteria, se não estiver, dá uma olhada nesse artigo do GUJ ensinando a usar PreparedStatement, fica muito mais elegante, seguro e vai te dar menos dor de cabeça =) http://guj.com.br/articles/115[/list]
[list]Ainda continuo não entendendo porquê não deu certo trocar o char[] senha por String senha, basta você efetuar as mudanças de todos os char[] senha por String senha, uma string já representa um array de char dinâmico que aumenta e diminui conforme a necessidade, a gente usa char geralmente quando se quer limitar o tamanho, por exemplo char[10]… Pra você ver, os campos JTextField da sua aplicação vão retornar um string quando você der um getText pra obter o valor que tá lá ;)[/list]

Espero ter ajudado, valeu…

Oi.
Eu tô usando o Hibernate.

Esse meu ‘Password’ é um JPasswordField.

tem como me mostrar um exemplo de criteria?

[]'s

O Hibernate tem uma documentação ótima, inclusive em português… http://docs.jboss.org/hibernate/core/3.6/reference/pt-BR/html/querycriteria.html :smiley:

[size=18]Valeu pela dica!
:smiley: [/size]

Jackye você conseguiu resolver o problema ?

estou fazendo uma aplicação desktop e estou tentando validar um login também
estou começando agora a usar o hibernate

será que você poderia postar como ficou o método que faz a busca do login e a senha ?