Duvida sobre validarAcesso

9 respostas
C

Pessoal tenho o método abaixo para validar acesso em um formulário de login. Só que mesmo quando coloco a senha incorreta ele acessa o formulário principal:

Alguém poderia me auxiliar.
public void ChecarLogin(String user, String pass) {

        try {
            String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";

            PreparedStatement stmt = this.conexao.prepareStatement(sql);
            stmt.setString(1, user);
            stmt.setString(2, pass);

            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                if (user.equals(user) && pass.equals(pass)) {
                    JOptionPane.showMessageDialog(null, "Logado");
                    rs.close();
                    stmt.close();
                } else{
                    JOptionPane.showMessageDialog(null, "Usuário ou Senha incorreto");
                }
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Houve algum erro no Login" + e);

        }
    }
No evento do botão:
private void jBLogarActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            ManipulaDAO obj = new ManipulaDAO();
            obj.ChecarLogin(this.jtUsuario.getText(), this.jtSenha.getText());
            this.dispose();
            new jFramePrincipal().setVisible(true);
            // TODO add your handling code here:
        } catch (SQLException ex) {
            Logger.getLogger(jFrameLogin.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

9 Respostas

luiz_renato

CaioNascimento,

O seu método pra validar tem que retornar boolean true quando o usuario e o login forem encontrados no banco , do contrário false.Retornando void ChecarLogin não impede de exebir a tela caso os dados não sejam encontrados no banco.
Daí antes de exibir sua tela vc checa o método de validação.
Outra dica: nesse método de validação não deve-se exibir mensagens ou fazer coisas da interface gráfica, ele deve somente verificar login e senha.
Se a validação for falsa (ChecarLogin for false) vc exibe uma mensagem.
E outra :procure usar nomes de métodos iniciando em minúsculo.

C

Luiz,
Valeu pelas dicas NOVATO em java já viu neh…HEHE

Você poderia me dar um exemplo de como ficaria esse meu código com um método boolean?

ederson_js

Olá Caio, pelo que ví o seu método não está comparando o retorno do banco, e sim os mesmos dados que recebeu na invocação do método.

Pos isso sempre entrará no IF.

sammers21

Tecnicamente seria assim!

public boolean ChecarLogin(String user, String pass) {  
      
            try {  
                String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";  
      
                PreparedStatement stmt = this.conexao.prepareStatement(sql);  
                stmt.setString(1, user);  
                stmt.setString(2, pass);  
      
                ResultSet rs = stmt.executeQuery();  
                if (rs.next()) {  
                    if (user.equals(user) && pass.equals(pass)) {  
                        JOptionPane.showMessageDialog(null, "Logado");  
                        rs.close();  
                        stmt.close();  

return true;


                    } else{  
                        JOptionPane.showMessageDialog(null, "Usuário ou Senha incorreto");  
return false;
                    }  
                }  
            } catch (SQLException e) {  
                JOptionPane.showMessageDialog(null, "Houve algum erro no Login" + e);  
      
            }  
        }

No evento do botão:

private void jBLogarActionPerformed(java.awt.event.ActionEvent evt) {  
            try {  
                ManipulaDAO obj = new ManipulaDAO();  
  

                
if(obj.ChecarLogin(this.jtUsuario.getText(), this.jtSenha.getText())){

                this.dispose();  
                new jFramePrincipal().setVisible(true);  
                // TODO add your handling code here:  
}


            } catch (SQLException ex) {  
                Logger.getLogger(jFrameLogin.class.getName()).log(Level.SEVERE, null, ex);  
            }  
        }
ederson_js

A maneira citada pelo Luiz seria a mais indicada, mas não se esqueça de fazer a comparação corretamante.

ederson_js

Tente isso :

public boolean ChecarLogin(String user, String pass) {  
               String resultPass = null;
               String resultUser = null;
      
            try {  
                String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";  
      
                PreparedStatement stmt = this.conexao.prepareStatement(sql);  
                stmt.setString(1, user);  
                stmt.setString(2, pass); 

 ResultSet rs = stmt.executeQuery();  
   
                if (rs.next()) {  
                  resultPass = rs.getString("password"); // nome de senha campo em seu banco
                  resultUser = rs.getString("user"); //nome do campo de nome de usuario em seu banco
                    if (user.equals(resultUser) && pass.equals(resultPass)) {  
                        JOptionPane.showMessageDialog(null, "Logado");  
                        rs.close();  
                        stmt.close();  

return true;

        } else{  
                        JOptionPane.showMessageDialog(null, "Usuário ou Senha incorreto");  
return false;
                    }  
                }  
            } catch (SQLException e) {  
                JOptionPane.showMessageDialog(null, "Houve algum erro no Login" + e);  
      
            }  
        }
luiz_renato

sim:

public boolean checarLogin(String user, String pass) throws SQLException {
        boolean isValido=false; // a variavel que vai ter o resultado
        String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";

        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        stmt.setString(1, user);
        stmt.setString(2, pass);

        ResultSet rs = stmt.executeQuery();
       if (rs.next()) {
               isValido = true;
        } else{ 
               isValido=false;
        }
        rs.close();
        stmt.close();
        return isValido;
 }
No evento do teu form vc chama (use dentro de um bloco try/catch pois lança SQLException e não vou entrar nesse detalhe)
ManipulaDAO obj = new ManipulaDAO();  
if (obj.checarLogin(this.jtUsuario.getText(), this.jtSenha.getText()) ) {
    this.dispose();  
     new jFramePrincipal().setVisible(true);  
} else {
    //mostra mensagem de erro e o q vc quizer mais
}
Tenta entender pra implementar...
ederson_js

A maneira como o Luiz postou realmente é a melhor por ser a mais otimizada… não copie somente, tente compreender…

C

Puts bem simples, porém eficaz…HEH

Valeu gente Brigadão!

Criado 25 de abril de 2011
Ultima resposta 26 de abr. de 2011
Respostas 9
Participantes 4