Validar login e senha netbeans
Como devo fazer um codigo para validar login e senha no netbeans/java?
Estou usando o banco de dados mysql:
database = corporativo;
table = cadastro_usuario
colunas = login e senha!
variavel JtextField de login = txtlogin
varialvel jPasswordField1 = txtsenha
Se validado pelo banco então o sistema abre um novo menu, caso contrario rotorna as mensagem de erro se: usuario errado; Usuario incorreto tente novamente!; senha errada; Senha incorreta tente novamente!.
private void botaookActionPerformed(java.awt.event.ActionEvent evt) {
????????????
}
Jose Nunes
Curtidas 0
Respostas
Jose Nunes
18/12/2011
Fala jovem blz!?
Mostre-nos um pouco do que vc ja fez para termos uma idéia!!
Mas para ir quebrando o galho tem este link:
[url]http://javafree.uol.com.br/topic-879383-validar-login-e-senha-digitados-no-jtextfield.html[/url]
GOSTEI 0
Jose Nunes
18/12/2011
Beleza,
Segue anexo o que consegui fazer.
GOSTEI 0
Jose Nunes
18/12/2011
Jovem... não entendi muito bem onde vc esta fazendo a comparação do que o usuario digitou com o que vc tem em seu banco de dados...
É no codigo acima???
Vc esta comparando o txtLogin (o que o usuario digitou) com a palavra "login" e a senha (o que o usuario digitou) com a palavra "senha"??
Vc possui em seu banco de dados um usuario com o nome usuario e este possui a senha que é senha?
Fiquei meio na duvida quanto a isso... rss
Mas vamos lah!! Faz o seguinte, primeiro:
- Na sua classe CONEXAO vc tem o metodo CONSULTAR... correto!?
Então... este metodo tem que te retornar alguma coisa, retornar o nome do usuario, a senha ou algo que possa te falar se o usuario existe ou nao... Ele esta como void.. faz mais ou menos assim:
Depois de vc ter feito isso... aii vc irá comparar a resposta... ou seja vc vai comparar se a resposta do consultar é TRUE ou FALSE... se for true vc fala que o usuario esta logado:
Algumas observações:
Comandos para Banco de Dados => De uma lida nos tutoriais do Fórum... para vc entender melhor como fazer um select, insert entre outras coisas importantes..
Use o PreparedStatement => Ele permite vc colocar caracteres curingas.. (no exemplo acima foi a '?') pra não ficar concatenando String... fazer com PreparedStatement é bem mais seguro!
Use a função toUpperCase() se necessario => Esta função ira transformar td o que vc digitou para maiusculo!! Assim no seu banco de dados no campo login nao tera divergencias por exemplo de:
JOSE, Jose, jose, etc...
Ou seja... no seu banco de dados estará sempre JOSE (todas as letras maiusculas).. mas faça isso somente se vc quiser tratar esta situação... pois existem sofwares em que o login com a letra minuscula é importante... aii vc vê se esta função pode te ajudar.
No exemplo que fiz nem coloquei esta função... mas é importante lembrar a utilização da mesma!
Eu nao testei o codigo.. rss... É so para vc tirar uma ideia!!
Qualquer coisa vc posta aii ok?!!
Abraços...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))
public boolean consultar (String login, String senha){ // Manda como parametro para ele duas variaveis para ele procurar no banco de dados! boolean autenticado = false; String sql; sql = "select login, senha from NOME_DA_SUA_TABELA where login = ? and senha = ?"; PreparedStatement ps; ps = conexao.prepareStatement(sql); ps.setString(1, login); ps.setString(2, senha); ResultSet rs; rs = ps.executeQuery(); if (rs.next()) { String loginBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_O_LOGIN"); String senhaBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_A_SENHA"); autentificado = true; } ps.close(); return autenticado; } catch (SQLException ex) { System.out.println("Erro ao recuperar cliente/ senha.); Logger.getLogger(CartaoDAO.class.getName()).log(Level.SEVERE, null, ex); throw new RuntimeException(); } }
String login = txtLogin.getText(); String senha = txtSenha.getPassword(); boolean resposta = conexao.consultar (login, senha); if (resposta == true){ JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); }else { JOptionPane.showMessageDialog(rootPane, "login não realizado!\n Favor conferir o usuario e senha digitado!"); }
GOSTEI 0
Jose Nunes
18/12/2011
Estou comparando o que o usuario digitou no txtlogin e no txtsenha com o que esta no banco de dados nos compos login e senha respectivamente.
[quote="altagnam"]Jovem... não entendi muito bem onde vc esta fazendo a comparação do que o usuario digitou com o que vc tem em seu banco de dados...
É no codigo acima???
Vc esta comparando o txtLogin (o que o usuario digitou) com a palavra "login" e a senha (o que o usuario digitou) com a palavra "senha"??
Vc possui em seu banco de dados um usuario com o nome usuario e este possui a senha que é senha?
Fiquei meio na duvida quanto a isso... rss
Mas vamos lah!! Faz o seguinte, primeiro:
- Na sua classe CONEXAO vc tem o metodo CONSULTAR... correto!?
Então... este metodo tem que te retornar alguma coisa, retornar o nome do usuario, a senha ou algo que possa te falar se o usuario existe ou nao... Ele esta como void.. faz mais ou menos assim:
Depois de vc ter feito isso... aii vc irá comparar a resposta... ou seja vc vai comparar se a resposta do consultar é TRUE ou FALSE... se for true vc fala que o usuario esta logado:
Algumas observações:
Comandos para Banco de Dados => De uma lida nos tutoriais do Fórum... para vc entender melhor como fazer um select, insert entre outras coisas importantes..
Use o PreparedStatement => Ele permite vc colocar caracteres curingas.. (no exemplo acima foi a '?') pra não ficar concatenando String... fazer com PreparedStatement é bem mais seguro!
Use a função toUpperCase() se necessario => Esta função ira transformar td o que vc digitou para maiusculo!! Assim no seu banco de dados no campo login nao tera divergencias por exemplo de:
JOSE, Jose, jose, etc...
Ou seja... no seu banco de dados estará sempre JOSE (todas as letras maiusculas).. mas faça isso somente se vc quiser tratar esta situação... pois existem sofwares em que o login com a letra minuscula é importante... aii vc vê se esta função pode te ajudar.
No exemplo que fiz nem coloquei esta função... mas é importante lembrar a utilização da mesma!
Eu nao testei o codigo.. rss... É so para vc tirar uma ideia!!
Qualquer coisa vc posta aii ok?!!
Abraços...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))
public boolean consultar (String login, String senha){ // Manda como parametro para ele duas variaveis para ele procurar no banco de dados! boolean autenticado = false; String sql; sql = "select login, senha from NOME_DA_SUA_TABELA where login = ? and senha = ?"; PreparedStatement ps; ps = conexao.prepareStatement(sql); ps.setString(1, login); ps.setString(2, senha); ResultSet rs; rs = ps.executeQuery(); if (rs.next()) { String loginBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_O_LOGIN"); String senhaBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_A_SENHA"); autenticado = true; } ps.close(); return autenticado; } catch (SQLException ex) { System.out.println("Erro ao recuperar cliente/ senha.); Logger.getLogger(CartaoDAO.class.getName()).log(Level.SEVERE, null, ex); throw new RuntimeException(); } }
String login = txtLogin.getText(); String senha = txtSenha.getPassword(); boolean resposta = conexao.consultar (login, senha); if (resposta == true){ JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); }else { JOptionPane.showMessageDialog(rootPane, "login não realizado!\n Favor conferir o usuario e senha digitado!"); }
GOSTEI 0
Jose Nunes
18/12/2011
Humnn... se vc esta fazendo esta comparação desta forma:
acho q não dará certo... no codigo acima vc esta comparando o que o usuario digitou com a palavra login e a senha com a palavra senha...
Se vc tiver pegado a senha e o login deste usuario a atribuido as variaveis login e senha, o certo é vc tirar as "" (aspas)... assim a variavel login tera o valor que vc buscou no banco de dados e a variavel senha tera outro valor que vc tb teria buscado no banco de dados... ficando assim:
Creio que desta forma não dará mt certo tb não viu... por exemplo eu sou o usuario e digito lah na sua tela no campo login o meu nome Altagnam... como vc vai comparar o meu login e a minha senha, sendo que vc ainda não atribui nenhum valor para as variaveis login e senha?
Tava olhando o seu codigo e a parte do login esta assim:
OBS: Não achei o lugar que vc pega a senha e usuario no banco de dados
Tenta mais ou menos assim:
Mas de qualquer forma... da sua maneira o codigo ficaria ruimm.. pois vc teria que fazer duas consultadas no banco de dados.. uma para pegar o login: O login estando certo.. vc pegaria a senha...
Na resposta anterior (não fiz o teste mas acho que funciona), vc faria somente uma consulta.. se o usuario e senha estiverem corretos... o metodo te retorna uma variavel booleana com o valor true.. com isso vc faz a comparação e ve se usuario esta correto...
Ahh uma coisa importante... creio que fazendo da sua forma.. o seu software estará um pouco frágil.. visto que vc vai ter que retornar a senha correta do usuario para fazer a comparação com o que ele digitou.. entao.. pode haver alguma meneira de manipular esses dados e burlar essa parte do login..
Caso vc nao tenha entendido o meu raciocinio ou até mesmo ao contrario.. eu não tenha entendi o seu... favor avisar!
Abraços...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))
if (txtlogin.getText().equals(login)&& new String(txtsenha.getPassword()).equals(senha))
private void botaologarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaologarActionPerformed /*if (txtlogin.getText().equals("") || txtsenha.getText().equals("")); JOptionPane.showInternalMessageDialog (null, "Os campos não podem ser nulos!");*/ int resp = JOptionPane.showConfirmDialog(rootPane, "Deseja autenticar este login e senha?", "Atencão", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); String sql = ""; if (resp == 0) { if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha")) { sql = " select from cadastro_usuario where login = " + txtlogin.getText(); conexao.consultar(sql); sql = " select from cadastro_usuario where senha = " + txtsenha.getText(); conexao.consultar(sql); JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); } else { JOptionPane.showMessageDialog(rootPane, "Erro no login: verifique!"); } } else if (resp == 2) { JOptionPane.showMessageDialog(rootPane, "Operação cancelada!"); }
private void botaologarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaologarActionPerformed /*if (txtlogin.getText().equals("") || txtsenha.getText().equals("")); JOptionPane.showInternalMessageDialog (null, "Os campos não podem ser nulos!");*/ int resp = JOptionPane.showConfirmDialog(rootPane, "Deseja autenticar este login e senha?", "Atencão", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); String sql = ""; if (resp == 0) { sql = " select from cadastro_usuario where login = " + txtlogin.getText(); String login = conexao.consultar(sql, login); // Aqui vc estará atribuindo um valor a variavel login // O seu metodo consultar terá que retornar uma String com o nome do usuario no banco de dados... // Se retornar null é porque o usuario digitado não existe.. estou passando para o metodo consultar dois parametros.. // O primeiro foi vc q escreveu que é a sua sql.. // O outro é o que ele deve procurar no banco de dados, ou seja, verificar se o login que o usuario digitou existe. //Se o login que usuario digitou esta no banco vamos fazer a busca da senha if (login.equals (txtlogin.getText ()){ sql = " select from cadastro_usuario where senha = " + txtsenha.getText(); String senha = conexao.consultar(sql, senha); // Fazendo a mesma coisa de cima... // Passando a SQL e o usuario para o metodo consultaro me retornar a senha do usuario solicitado if (senha.equals (txtsennha.getText())) { JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); } else { JOptionPane.showMessageDialog(rootPane, "login não realizado Favor conferir a senha digitada!"); } } } } else if (resp == 2) { JOptionPane.showMessageDialog(rootPane, "Operação cancelada!"); }
GOSTEI 0
Yuri Yamamoto
18/12/2011
altagnam
sou novato em java e queria sua ajuda, preciso fazer uma tela de login, peguei o código acima q tem o metodo consultar e tals e modifiquei para tentar usar, e ele não esta rodando da como pointernull o erro, e outra duvida é oq seria o loginBanco e senhaBanco?
(seria o login e a senha q uso para abrir o banco? pq aki tenho uma classe de conexao que faz a conexao com o banco ja)
GOSTEI 0
Yuri Yamamoto
18/12/2011
E ai jovem blz!?
Tava olhando o que eu escrevi e vi que nesta linha
pode ocorrer o erro de NullPointerException...
pois se o usuario não existir a variavel estará com null.. aii eu nao consigo comparar o retorno do metodo de comparação com o que o usuario digitou.. seria mais ou menos, tentar procurar uma palavra em algo que não existe, esta nula...
Pelo o que vc escreveu o erro deve estar ai... faz o seguinte... antes desta linha coloca um
aii vai ser impresso no console a variavel que esta retornando... se esta vindo preenchida ou nula...
Mas de qualquer forma, vamos alterar o codigo...
Mas aqui.. como vc esta fazendo? Ta seguindo o modelo que eu passei lah em cima... ou ta tentando fazer igual o rapaz que postou a duvida?
Tenta aii e me fala.. qualquer coisa.. coloca o seu codigo aii pra gente da uma olhada...
if (login.equals (txtlogin.getText ()){
System.out.printl(variavel_de_retorno_do_metodo_consulta)
if (login == (txtlogin.getText ()){ // Agora acho q não deve dar o erro (não testei o codigo) }
GOSTEI 0
Yuri Yamamoto
18/12/2011
Galera, vo aproveitar esse tópico aqui, se julgar necessário abrir outro pra tentar ajudar mais alguém agente faz isso certo? é que não achei ainda essa minha dúvida tão boba... vai vendo:
to usando JSF e Hibernate pra desenvolver uma aplicação, onde por enquanto to fazendo a tela de login que segue abaixo:
Bom acontece que quando eu submeto esse formulário, o managedBean não recebe nenhum valor, segue o ManagedBean, nele eu mando imprimir o valor de login no método fazerLogin, não preciso ainda me preocupar com DAO, Hibernate, etc... preciso apenas que este valor chegue preenchido no método citado:
segue ManagedBean:
Sou novo em programação em geral, mas to quebrando a cabeça, desde já obrigado!
<?xml version='1.0' encoding='ISO-8859-1' ?> <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" template="/arquivos/administrarTemplate.xhtml"> <ui:define name="conteudo"> <h:form rendered="#{!loginAdministradorManagedBean.loginAdministrador.validate}"> <h:panelGrid columns="2"> <h:outputLabel value="Login:" for="login" /> <h:inputText name="login" id="login" /> <h:outputLabel value="Senha:" for="senha" /> <h:inputSecret name="senha" id="senha" /> <h:commandButton value="Entrar" action="#{loginAdministradorManagedBean.fazerLogin}" /> </h:panelGrid> </h:form> </ui:define> </ui:composition>
@ManagedBean @SessionScoped public class LoginAdministradorManagedBean { private String login, senha; private LoginAdministrador loginAdministrador = new LoginAdministrador(); //aqui eu tenho os Getters e Setters public String fazerLogin() { System.out.println(login); //aqui chega null System.out.println(senha); //aqui chega null if (loginAdministrador.fazerLogin(getLogin(), getSenha())) {// e aqui a comparação, logicamente vai retornar false. FacesContext fc = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) fc.getExternalContext() .getSession(false); session.setAttribute("administrador", loginAdministrador.getAdministrador()); return "/sucesso.xhtml"; } else { return "/falha.xhtml"; } } }
GOSTEI 0
Yuri Yamamoto
18/12/2011
Nossaaaaa velho!
Depois de passar um dia inteiro procurando resolver essa "bagaça", fui tomar um café e pensei em fazer um teste tipo "olá mundo" da vida ae, daí foi que percebi que na linha:
o certo seria:
E aí, faz um novo tópico? Eu ainda não tinha achado nada que indicasse essa bobagem(falta de atenção)
<h:inputText name="login" id="login" />
<h:inputText name="login" id="login" value="#{loginAdministradorManagedBean.login}"/>
GOSTEI 0
Yuri Yamamoto
18/12/2011
Blz cara!!
É errando que a gente aprende!! O que importa que vc conseguiu resolver o seu problema.. creio que não seja necesário abrir um novo tópico para essa situação..
Abraços...
GOSTEI 0
Elisio Chinhama
18/12/2011
[quote="altagnam"]Jovem... não entendi muito bem onde vc esta fazendo a comparação do que o usuario digitou com o que vc tem em seu banco de dados...
É no codigo acima???
Vc esta comparando o txtLogin (o que o usuario digitou) com a palavra "login" e a senha (o que o usuario digitou) com a palavra "senha"??
Vc possui em seu banco de dados um usuario com o nome usuario e este possui a senha que é senha?
Fiquei meio na duvida quanto a isso... rss
Mas vamos lah!! Faz o seguinte, primeiro:
- Na sua classe CONEXAO vc tem o metodo CONSULTAR... correto!?
Então... este metodo tem que te retornar alguma coisa, retornar o nome do usuario, a senha ou algo que possa te falar se o usuario existe ou nao... Ele esta como void.. faz mais ou menos assim:
Depois de vc ter feito isso... aii vc irá comparar a resposta... ou seja vc vai comparar se a resposta do consultar é TRUE ou FALSE... se for true vc fala que o usuario esta logado:
Algumas observações:
Comandos para Banco de Dados => De uma lida nos tutoriais do Fórum... para vc entender melhor como fazer um select, insert entre outras coisas importantes..
Use o PreparedStatement => Ele permite vc colocar caracteres curingas.. (no exemplo acima foi a '?') pra não ficar concatenando String... fazer com PreparedStatement é bem mais seguro!
Use a função toUpperCase() se necessario => Esta função ira transformar td o que vc digitou para maiusculo!! Assim no seu banco de dados no campo login nao tera divergencias por exemplo de:
JOSE, Jose, jose, etc...
Ou seja... no seu banco de dados estará sempre JOSE (todas as letras maiusculas).. mas faça isso somente se vc quiser tratar esta situação... pois existem sofwares em que o login com a letra minuscula é importante... aii vc vê se esta função pode te ajudar.
No exemplo que fiz nem coloquei esta função... mas é importante lembrar a utilização da mesma!
Eu nao testei o codigo.. rss... É so para vc tirar uma ideia!!
Qualquer coisa vc posta aii ok?!!
Abraços...
ESTOU SEGUINDO ESTE TUTORIAL ME PERDI O PASSO ONDE FAÇO ESTA COMPRARÇÃO :
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))
public boolean consultar (String login, String senha){ // Manda como parametro para ele duas variaveis para ele procurar no banco de dados! boolean autenticado = false; String sql; sql = "select login, senha from NOME_DA_SUA_TABELA where login = ? and senha = ?"; PreparedStatement ps; ps = conexao.prepareStatement(sql); ps.setString(1, login); ps.setString(2, senha); ResultSet rs; rs = ps.executeQuery(); if (rs.next()) { String loginBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_O_LOGIN"); String senhaBanco = rs.getString("NOME_DA_COLUNA_QUE_TEM_A_SENHA"); autentificado = true; } ps.close(); return autenticado; } catch (SQLException ex) { System.out.println("Erro ao recuperar cliente/ senha.); Logger.getLogger(CartaoDAO.class.getName()).log(Level.SEVERE, null, ex); throw new RuntimeException(); } }
String login = txtLogin.getText(); String senha = txtSenha.getPassword(); boolean resposta = conexao.consultar (login, senha); if (resposta == true){ JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); }else { JOptionPane.showMessageDialog(rootPane, "login não realizado!\n Favor conferir o usuario e senha digitado!"); }
String login = txtLogin.getText();
String senha = txtSenha.getPassword();
boolean resposta = conexao.consultar (login, senha);
if (resposta == true){
JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!");
}else {
JOptionPane.showMessageDialog(rootPane, "login não realizado!\n Favor conferir o usuario e senha digitado!");
}
GOSTEI 0
Elisio Chinhama
18/12/2011
Opa... baum!?
O que acontece é o seguinte:
Ele pega o retorno (um booleano) e verifica se a resposta é TRUE... ou seja, vai no banco de dados e compara a senha e o login que o usuário digitou (método consultar).. se a resposta for TRUE o usuário esta autenticado, se retornar FALSE, o usuário digitou o login e/ou senha inválidas...
boolean resposta = conexao.consultar (login, senha); if (resposta == true){ JOptionPane.showMessageDialog(rootPane, "login realizado com sucesso!"); }else { JOptionPane.showMessageDialog(rootPane, "login não realizado!\n Favor conferir o usuario e senha digitado!"); }
GOSTEI 0