Autenticação de Usuário

Boa tarde Pessoal.

Estou tentando realizar a validação de usuário em um BD MySql, para acesso ao módulo principal de um sistema DeskTop. Acontece que sou novato em Java, e é a primeira vez que utilizo ResultSet etc.

Pelos exemplos que verifiquei, cheguei ao código no final desta mensagem. Minha dúvida é como comparar essas informações com as que estão no BD? (Nome e Codigo). No BD tenho LOGIN e SENHA.
String nome = new String (txtLogin.getText()); // Recebe o Login
String codigo = new String (senha.getPassword()); // Recebe a senha

No código no final desta mensagem não esta funcionando, pois da o seguinte erro: Linha 146 corresponde ao
—> pstmt.setString(1, usuarios.getLogin());

Galera peço desculpas se for furo meu (O que provavelmente é), mas me ajudem pelo amor de DEUS. Pois tudo que eu já procurei na documentação desta API, eu ainda não consegui me achar.

Agradeço a todos e conto com a ajuda de vocês.

Edvaldo

// -------------------------------------- erro ----------------------------------- //

java.lang.NullPointerException
	at Login$ButtonHandler.actionPerformed(Login.java:146)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)

// ------------------ Botão de validação de usuário e senha ----------------- //

class ButtonHandler implements ActionListener {
        
        public void actionPerformed(ActionEvent ae) {
            if (ae.getSource() == acessar) {    	
            	String nome = new String (txtLogin.getText());		// Recebe o Login
            	String codigo = new String (senha.getPassword());  	// Recebe a senha 
            	if (nome.equals( "" ) || codigo.equals( "" )) {
            		JOptionPane.showMessageDialog(null, "Código ou Senha nulo." + 
    						"\n\t" +
    						"\n\tLogin e senha devem ser digitados!" +
    						"\n\t",
    						"Informações não Digitadas!!!", JOptionPane.ERROR_MESSAGE);
            		txtLogin.requestFocus();
	    			txtLogin.setText("");
	    			senha.setText("");
            	}
            	else {       
                    Usuarios usuarios = null;
                    PreparedStatement pstmt = null;
                    Connection conn = contatosDAO.getConnect();
                    ResultSet rs = null;
                    try {
                    	String sql = "SELECT LOGIN, SENHA FROM USUARIOS WHERE LOGIN = ? AND SENHA = ?";
                        pstmt = conn.prepareStatement(sql);
                        pstmt.setString(1, usuarios.getLogin());
                        pstmt.setString(2, usuarios.getSenha());                      
                        rs = pstmt.executeQuery();          
                        if(rs.next()) {
                			if(rs.getString("LOGIN").equals(nome) && rs.getString("SENHA").equals(codigo)) {  
                				Main main = new Main("Sistema de Gerenciamento Pessoal - Versão 1.0Beta");
                			    main.init();
                			    main.setResizable(false);	
                			    setVisible(false);	
                			    }
                			else {
            			    	JOptionPane.showMessageDialog(null, "Verifique!" + 
            			    			"\n\t" +
            			    			"\n\tLogin ou senha não cadastrados!" +
            			    			"\n\t",
            			    			"Login Inválido", JOptionPane.ERROR_MESSAGE);
            			    			txtLogin.requestFocus();
            			    			txtLogin.setText("");
            			    			senha.setText("");
                			}
                			
            			}
                        contatosDAO.close();  
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
            	}
            }

[size=“11”]
[color=“red”]

  • Editado: Aumente as chances de alguém responder o seu tópico. Use BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários. - Matheus[/color][/size] :joia:

Tudo depende de vários fatores:

1-Sua aplicação tem que ser muito segura???
Se sim vc terá que rever todos os seus metodos e usar Criptográfia e etc…

2-Se não for pode ser feito como está,mas tem algo errado ae!!

Não encontrei no seu código o metodo

usuarios.getLogin();

Onde ele está??Não seria

(1,nome);
(2, senha)
??

E outra acho que ae vc deve usar um painel modal , um JDialog, pois o JOptionPane pode ser fechado e burlado dessa forma…

Há várias formas de ser feito isso!! Qualquer coisa só falar!!

[quote=“FelipeSS_2”]Tudo depende de vários fatores:

1-Sua aplicação tem que ser muito segura???
Se sim vc terá que rever todos os seus metodos e usar Criptográfia e etc…

2-Se não for pode ser feito como está,mas tem algo errado ae!!

Não encontrei no seu código o metodo

usuarios.getLogin();

Onde ele está??Não seria

(1,nome);
(2, senha)
??

E outra acho que ae vc deve usar um painel modal , um JDialog, pois o JOptionPane pode ser fechado e burlado dessa forma…

Há várias formas de ser feito isso!! Qualquer coisa só falar!![/quote]

Bom dia Felipe.

Sou iniciante, o que não me impede de já fazer a coisa certa, mas a principio só estou passeando pela linguagem e conhecendo o java. Então a questão de segurança neste momento não é importante, pois o sistema é um teste para meu uso. Agradeço suas dicas.

Você poderia me passar um modelo de login baseado na forma como estou desenvolvendo? Desta forma facilitaria minha verificação do que pode estar faltando?

De acordo com os exemplos que eu verifiquei, eu não entendi quando vc citou a falta do metodo usuarios.getLogin(). Eu tenho uma classe chamada usuarios que contempla estes metódos…

* Created on 22/06/2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Edvaldo R. de Melo
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.io.*;
import java.util.*;


public class Usuarios implements Serializable {
    private String nome;
    private String login;
    private String senha;
    private Date nascimento;
    private String email;
    
    public Usuarios (  String nome, String login, Date nascimento, String email) {
                        setNome(nome);
                        setLogin(login);
                        setNascimento(nascimento);
                        setEmail(email);                       
    }
    
	public void setNome(String nome) {
        this.nome = nome;
    }
    
    public String getNome() {
        return nome;
    }
    
    public void setLogin(String login) {
        this.login = login;
    }
    
    public String getLogin() {
        return login;
    }
    
    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    public String getSenha() {
        return senha;
    }
    
    public void setNascimento(Date nascimento) {
        this.nascimento = nascimento;
    }
    
    public Date getNascimento() {
        return nascimento;
    }
    
    public void setEmail(String email) {
    	this.email = email;
    }
    
    public String getEmail() {
    	return email;
    }
    
       
    public String toString() {
        return "- " + login;
    }
    
    public boolean equals (Object obj) {
        boolean flag = false;
        if (obj instanceof Usuarios) {
            Usuarios that = (Usuarios) obj;
            flag = that.login.equals(this.login);
        }
        return flag;
    }
    
    public int hashCode() {
        return ((login != null) ? login.hashCode() : 0);
    }
	
}

Agradeço sua atenção.

Obrigado!!!

Edvaldo

[b][size=“13”]
[color=“red”]

  • Editado: Lembre-se de usar BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários - Matheus[/color][/size][/b]

Olá, tambem sou iniciante em Java, e acho que no seu caso vc está no caminho certo, só que ao invez de colocar o conteudo do campo em uma String vc deve setar o logim e senha (ex.usuario.setLogin) pra poder usar o getLogin.

Eu fiz um metodo, tipo não sei se é a melhor logica ou se estou usando boas praticas mas funciona bem

/**
 	 * Verifica se existe o usuario no banco de dados
 	 * @param USU = nome do usuario
 	 * @param SENHA = senha do usuario
 	 */
 	public void setLogin(String USU,String SENHA){
 		PreparedStatement ps = null;
 		ResultSet rs = null;
 		String sSQL = null;
 		String sUsuario = null;
 		String sPassword = null;
 		String sdUsu = null;
 		
 		try{
 			if(USU.length()>0){
 	 			if(SENHA.length()>0){
 		 			sSQL = "SELECT USUARIO, SENHA, IDUSU FROM USUARIOS "
 			 			 + "WHERE USUARIO = '" + tifUsu.getText().toLowerCase().trim() + "' AND SENHA = '" + String.valueOf(tifSenha.getPassword()) + "' ";
 			 		try{
 			 			ps = con.prepareStatement(sSQL);
 			 			rs = ps.executeQuery();
 			 			while(rs.next()){	
 			 				sUsuario = rs.getString(1).toLowerCase().trim();
 			 				sPassword = rs.getString(2).trim();
 			 				sdUsu = rs.getString(3).trim();
 			 			} 
 			 		}
 			 		catch( SQLException sqlex ) {
 			 	          JOptionPane.showMessageDialog(null,"Erro ao logar com usuario.\n", "Erro",
 			 		   	         JOptionPane.ERROR_MESSAGE );
 			 	        System.out.println("Erro ao logar com usuario. ==>>"+sqlex.toString());
 			 		}
 	 			}
 	 			else{
 	 				JOptionPane.showMessageDialog(null,"Senha em branco!", "Aviso",
 	 			   	         JOptionPane.INFORMATION_MESSAGE );
 	 				return;
 	 			}
 	 		}
 	 		else{
 				JOptionPane.showMessageDialog(null,"Usuario em branco!", "Aviso",
 			   	         JOptionPane.INFORMATION_MESSAGE );
 				return;
 			}
 	 		
 			if((sUsuario!=null && sUsuario.trim().length()>0)&&(sPassword!=null && sPassword.trim().length()>0)){
 				if((sUsuario.equals(tifUsu.getText().toLowerCase().trim()))&&(sPassword.equals(String.valueOf(tifSenha.getPassword())))){
 	 				iflogin.setVisible(false);
 	 				setlogin(sUsuario,sPassword,sdUsu);//instancia o usuario e login para posterior utilização 
 	 				montaTela();//monta o resto da aplicação
 	 			}
 	 			else{
 	 				JOptionPane.showMessageDialog(null,"Usuario e Senha invalidos!", "Aviso",
 	 			   	         JOptionPane.INFORMATION_MESSAGE );
 	 				tifUsu.setText("");
 	 				tifSenha.setText("");
 	 				return;
 	 			}
 			}
 			else{
 				JOptionPane.showMessageDialog(null,"Usuario e Senha invalidos!", "Aviso",
 			   	         JOptionPane.INFORMATION_MESSAGE );
 				tifUsu.setText("");
 				tifSenha.setText("");
 				return;
 			}
 		}
 		finally{
 			ps = null;
 			rs = null;
 			sSQL = null;
 			sUsuario = null;
 	 		sPassword = null;
 	 		sdUsu = null;
 		}
 	}

PregoSpan,

Utilizei o exemplo do seu metodo e realmente funcionou bem. Agradeço a ajuda. A sua lógica e organização do código no meu modesto ponto de vista, esta boa. alguns blocos de IF podem ser otimizados, eu fiz isso.

Em relação a utilizar o usuarios.setLogin(), diante das linhas abaixo, vc poderia me dizer como ficaria? Pois tentei eu não consigo, só para esclarecer.

pstmt = conn.prepareStatement(sql);
pstmt.setString(1, usuarios.getLogin());
pstmt.setString(2, usuarios.getSenha());
rs = pstmt.executeQuery();

Valeu muito!!!

Obrigado!

Edvaldo