Validar login e senha netbeans

Java

18/12/2011

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

Jose Nunes

Curtidas 0

Respostas

Jose Nunes

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

Jose Nunes

18/12/2011

Beleza, Segue anexo o que consegui fazer.
GOSTEI 0
Jose Nunes

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...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))

É 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:
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();
        }
}

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:

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!");
}

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...
GOSTEI 0
Jose Nunes

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...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))

É 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:
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();
        }
}

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:

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!");
}

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...
GOSTEI 0
Jose Nunes

Jose Nunes

18/12/2011

Humnn... se vc esta fazendo esta comparação desta forma:
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha")) 
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:
if (txtlogin.getText().equals(login)&& new String(txtsenha.getPassword()).equals(senha))
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
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!");
            }  
Tenta mais ou menos assim:
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!");
            }  
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...
GOSTEI 0
Yuri Yamamoto

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

Yuri Yamamoto

18/12/2011

E ai jovem blz!? Tava olhando o que eu escrevi e vi que nesta linha
if (login.equals (txtlogin.getText ()){  
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
System.out.printl(variavel_de_retorno_do_metodo_consulta)
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...
if (login == (txtlogin.getText ()){  
// Agora acho q não deve dar o erro (não testei 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...
GOSTEI 0
Yuri Yamamoto

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:
<?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>
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:

@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";
		}
	}

}
Sou novo em programação em geral, mas to quebrando a cabeça, desde já obrigado!
GOSTEI 0
Yuri Yamamoto

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:
<h:inputText name="login" id="login" />
o certo seria:
<h:inputText name="login" id="login" value="#{loginAdministradorManagedBean.login}"/>
E aí, faz um novo tópico? Eu ainda não tinha achado nada que indicasse essa bobagem(falta de atenção)
GOSTEI 0
Yuri Yamamoto

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

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...
if (txtlogin.getText().equals("login")&& new String(txtsenha.getPassword()).equals("senha"))

É 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:
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();
        }
}

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:

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!");
}

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 :
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

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
POSTAR