Problemas Login

18 respostas
F

Bom,e que estou com problema na validação ,sempre quando eu digito login e senha independente se estar certo ou errado ele me aplica essa mensagem sempre

,"O login/senha atual não confere.", "Validação"

Aqui e meu botão

try {
            Validacao v= new Validacao();
     
           
               if (!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getPassword().toString()))) {  
                   JOptionPane.showMessageDialog(this,"O login/senha atual não confere.", "Validação" , JOptionPane.WARNING_MESSAGE);  
                   jPasswordFieldSenha.requestFocus();  
                   jPasswordFieldSenha.selectAll(); 
                   return ;
               }else{
                    JOptionPane.showMessageDialog(this, "Logado no Sistema","Validação", JOptionPane.WARNING_MESSAGE);  
               }  
                 
                  } catch (SQLException ex) {
            Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE, null, ex);
        }// TODO add your handling code here:
    }

Classe dao.

public Boolean login(String usuario, String senha) throws SQLException{  
     boolean existe = false;  
     PreparedStatement stm = conexao.prepareStatement("SELECT * FROM usuario WHERE usuario.usuario = ? AND senha = ?");  
     stm.setString(1, usuario);  
     stm.setString(2, senha);  
     ResultSet rs = stm.executeQuery();  
       Usuario d = new Usuario();
     if(rs.next()){  

        existe = true;
       }  
     return existe;  
    }

Obrigado.

Se der para alguém me mostrar em como eu poderia fazer com perfil de usuário ou administrador ,caso um dos dois estiver logo ficaria grato.

18 Respostas

R

Bom dia, Flavio!

Faz tempo que não utilizo consulta direto com sql.Acredito que o problema esta no teu if.

quando você faz if(rs.next()), ele vai para o proximo registro e como você ja esta no registro que buscou no banco ele não tem mais para onde ir e então diz que não existe.

tenta colocar antes do teu if o código abaixo, assim ele vai para antes do primeiro registro, quando você fizer o if ele vai para o primeiro e então vai existir.

rs.beforeFirst();
F

Ola

Essa código abaixo não esta funcionando ele esta pedindo void.

rs.beforeFirst();

Obrigado

R

a principio é esta codigo mesmo. Voce esta utilizando os import correto?
para o resultset por exemplo é

import java.sql.ResultSet;

Veja um código que achei aqui e ve se te ajuda.

public String getEcfCaixa() {
        retorno = "";
        Integer totalRegistros;
        List<EcfCaixa> listEcfCaixa;
        EcfCaixa ecfCaixa;
        try {
            stm = bd.conectar().createStatement();
            rs = stm.executeQuery("select COUNT(*) as TOTAL from ECF_CAIXA");
            rs.first();

            totalRegistros = rs.getInt("TOTAL");
            if (totalRegistros > 0) {
                stm = bd.conectar().createStatement();
                rs = stm.executeQuery("select * from ECF_CAIXA");
                rs.beforeFirst();

                listEcfCaixa = new ArrayList<>();

                while (rs.next()) {
                    ecfCaixa = new EcfCaixa();
                    ecfCaixa.setId(BigInteger.valueOf(rs.getInt("ID")));
                    if (rs.getDate("DATA_CADASTRO") != null) {
                        ecfCaixa.setDataCadastro(rs.getDate("DATA_CADASTRO").toString());
                    } else {
                        ecfCaixa.setDataCadastro("");
                    }
                    ecfCaixa.setNome(rs.getString("NOME"));

                    listEcfCaixa.add(ecfCaixa);
                }
                retorno = escreveXMLEcfCaixa(listEcfCaixa);
            }

            return retorno;

        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        } finally {
            bd.desconectar();
        }
    }
F

Cara ,não me ajudou .estou com problema nesse login,não sei pq esta dano esse erro.

Obrigado

R

faz o seguinte, altera o código

public Boolean login(String usuario, String senha) throws SQLException{     
  boolean existe = false;     
  PreparedStatement stm = conexao.prepareStatement("SELECT * FROM usuario WHERE usuario.usuario = ? AND senha = ?");     
  stm.setString(1, usuario);     
  stm.setString(2, senha);     
  ResultSet rs = stm.executeQuery();     
    Usuario d = new Usuario();   
  if(rs.next()){     
  
     existe = true;   
    }     
  return existe;     
}

por

public Boolean login(String usuario, String senha) throws SQLException{     
  boolean existe = false;     
  Statement stm = conexao.createStatement();     
  ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = " + usuario + " AND senha = " + senha);     
  Usuario d = new Usuario();   
  if(rs.next()){     
  
     existe = true;   
    }     
  return existe;     
}
fabiocortolan

Posso estar enganado mas vc não precisa de aspas simples nos textos mesmo com o ponto de interrogação?

ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '?' AND senha = '?'"); // aki não é necessário aspas?

// No caso do exemplo do rpassos81 tenho certeza d q é necessário colocar as aspas simples
ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' " + usuario + " ' AND senha = ' " + senha + " ' ");
F

Galera Ainda estou com mesmo problema,Ele mostra a mesma mensagem , que o loguin e senha atual nao confere,mesmo eu colocando os mesmo vlores que contem no banco.

Aqui esta os codigo que modifiquei.

Minha classe dao

public Boolean login(String usuario, String senha) throws SQLException{       
  boolean existe = false;       
  Statement stm = conexao.createStatement();       
  ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' " + usuario + " ' AND senha = ' " + senha + " ' ");         
  Usuario d = new Usuario();     
  if(rs.next()){       
    
     existe = true;     
    }       
  return existe;       
}      
}

Aqui e meu form

try {
            Validacao v= new Validacao();
     
           
               if (!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getPassword().toString()))) {  
                   JOptionPane.showMessageDialog(this,"O login/senha atual não confere.", "Validação" , JOptionPane.WARNING_MESSAGE);  
                   jPasswordFieldSenha.requestFocus();  
                   jPasswordFieldSenha.selectAll(); 
                   return ;
               }else{
                    JOptionPane.showMessageDialog(this, "Logado no Sistema","Validação", JOptionPane.WARNING_MESSAGE);  
               }  
                 
                  } catch (SQLException ex) {
            Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE, null, ex);
        }// TODO add your handling code here:
    }

obrigado galera.

fabiocortolan

Vc colocou espaço entre as aspas simples e as duplas, dessa forma vc está fazendo a busca pelo usuário com espaço no nome, ex:

Usuário: ‘Fabio’
Está pesquisando por ’ Fabio ’ (com espaços)

// Modifique seu código de:
ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' " + usuario + " ' AND senha = ' " + senha + " ' "); 

// Para
ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '" + usuario + "' AND senha = '" + senha + "' ");

Obs.: no último post separei as aspas com espaço e só agora percebi, desculpe por ter separado mas qdo coloquei junto pensei q ficaria difícil de perceber q tinha as aspas simples!

F

Fabio,ainda continua com erro,sempre mostrando a mensagem:O login/senha atual não confere.", "Validação. muito estranho

obrigado a quem estar me ajudando.

fabiocortolan

Vc já fez um debug para ver se os parâmetros passados na linha abaixo estão corretos?

if (!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getPassword().toString()))) {

Outra coisa, a senha q vc salvou no banco é criptografada? Já tentou utilizar o comando diretamente no gerenciador do banco de dados p/ ver se retorna alguma informação?

F

eu fiz um debug da linha que vc me mostrou .mas não deu nenhum problema

Thread AWT-EventQueue-0 parado em TelaLoguin.java:105.
LineBreakpoint TelaLoguin.java : 106 enviado com êxito.
Executando programa do usuário
Thread AWT-EventQueue-0 parado em Validacao.java:28.
Executando programa do usuário
Thread AWT-EventQueue-0 parado em Validacao.java:29.
Executando programa do usuário
Thread AWT-EventQueue-0 parado em Validacao.java:30.
Executando programa do usuário
Thread AWT-EventQueue-0 parado em Validacao.java:31.
Executando programa do usuário
Thread AWT-EventQueue-0 parado em TelaLoguin.java:32.
Programa do usuário finalizado

aqui meu banco php ele esta retornando sim um valor.
fiz um select tmb para ver se retorna.

3        	flavio 	[C@495bb7b7

A senha e criptografada sim, eu jogo a senha crip mas mesmo assim nada.ele só muda o mensagem quando mudo o boolean,coloco o primeiro true.ai ele so me da loguin correto mesmo eu colocando errado.

fabiocortolan

Vc disse q a senha no banco é criptgrafada, mas pelo q vi vc tá passando a senha sem criptografia na consulta, vc comparou os valores do debug com o resultado do banco de dados? O usuário e senha estão idênticos mesmo vc passando sem criptografia?

F

Ate sem criptografia esta dano esse erro.

F

Agora sei o que era. o campo formatado que eu estava usando estava passando o valor errado para comparacao.

Com o campo Jpassword.,cada valor q eu passo ele muda a senha pq?

Conectando ao banco
junio
[C@5e888f05

Conectando ao banco
junio
[C@2f704745

Aqui jtextfild normal.Esse eu logo com sucesso.

Conectando ao banco
junio
123
Conectando ao banco
junio
123

Agora eu te pergunto.Como eu posso usar o campo password do netbens, para ele não passar os valores diferentes na hora do login.pq eu vou ter que usar o campo password.

Se puder me ajudar eu agradeço.

F

Galera eu não estou conseguindo pegar o campo formatado do banco e comparar com a senha do login que q eu digito.Se eu jogar um valor 123 no banco e digitar no login 123 ele loga
mas ,não e assim eu quero o campo invés de aparecer 123 apareça *** tem que aparecer os asteriscos .

Meu botão

try {
            Validacao v= new Validacao();
     
           
               if (!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getText()))) {  
                   JOptionPane.showMessageDialog(this,"O login/senha atual não confere.", "Validação" , JOptionPane.WARNING_MESSAGE);  
                   jPasswordFieldSenha.requestFocus();  
                   jPasswordFieldSenha.selectAll(); 
                    System.out.println();
                   return ;
               }else{
                    JOptionPane.showMessageDialog(this, "Logado no Sistema","Validação", JOptionPane.WARNING_MESSAGE); 
                 new OutraTela().setVisible(true);
                    
               }      
                 
                  } catch (SQLException ex) {
            Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE, null, ex);
        }

Meu dao

public Boolean login(String usuario, String senha) throws SQLException{       
  boolean existe = false;       
  Statement stm = conexao.createStatement();       
 ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '" + usuario + "' AND senha = '" + senha + "' "); 
    System.out.println(usuario);
     System.out.println(senha);
 
  if(rs.next()){       
  
    existe = true;     
    }       
  return existe;       
}

Como eu posso resolver isto?Alguém me ajuda .

fabiocortolan

Algo q eu não tinha me atentado antes, troque o getText() do JPasswordField por getPassword(), o único problema é q vc terá q fazer uma conversão para String pois ele retorna char[], pode fazer dessa forma:

String s = new String(jPasswordFieldSenha.getPassword());

Isso deve resolver seu problema.

F

Oi Fabio não resolveu.

Olha isso. quando eu vó no banco e pego os valores de la esta dando certo.

Aqui esta senha do Banco : [C@f37742d // Quando eu coloco no login funciona

Quando eu digito a senha 123 no login dar errado .ele nao passa o mesmo valor do banco que e [C@f37742d.
por que já dei um system.print e me retorna 123.

Obrigado .

fabiocortolan

Mas como vc gravou esse valor no banco, vc pegou o valor do getPassword() do JPasswordField? Se for isso não vai funcionar mesmo, faz sua própria criptografia para salvar no banco, segue um dos muitos exemplos para criptografar senhas q vc encontra http://www.guj.com.br/articles/32.
Depois de criptografar e gravar no banco, leia o texto digitado (ex: 123) faça a mesma criptografia e compare com o valor salvo.

Criado 27 de julho de 2013
Ultima resposta 31 de jul. de 2013
Respostas 18
Participantes 3