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