[Não resolvido ainda]verificar senha no banco

3 respostas
Mariana.Vecci
Oiii gente, eu criei um jframe para fazer a tela de login do programa, nela tem dois jlabel, um textfiels e um passwordtextfield e um jbutton pra verificar a senha e dar acesso ao programa (se vor verdadeira a senha, ele abre o jframe principal com os botões das opções), criei uma tabela no banco de dados chamada de login, com os campos nome e senha, ambos varchar, fiz uma classe chamada "LoginUsuarioDAO" e nela to fazendo um método boolean pra testar a senha, e este método eu vo chamar dentro no botão do login, enfim, este é a classe q contem este método:
package sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class LoginUsuarioDAO {

	public boolean validar(String nome, String senha) {
		boolean result = false;
		Connection conexao = null;
		PreparedStatement comando = null;
		try {
			conexao = Conexao.getConexao();
			String sql = "Select senha from Login where senha = ?";
			comando = conexao.prepareStatement(sql);
			
			comando.setString(1,senha);
			ResultSet rs = comando.executeQuery();   
            result = rs.next();   
            conexao.close();   
            rs.close();   
            comando.close();   

		}	

		catch (SQLException e) {   
			e.getMessage();   
			System.out.println(result);   
		}   
		System.out.println(result);   
		return result;  
	}

Gostaria que me ajudassem a arrumar ele.
Obrigada e beijokas!

3 Respostas

wilds87

Acho que seu sql não atende o que você deseja fazer, dê uma revisada no negócio.

M

Oi Mariana.Vecci

Neste sql você não compara junto com a senha o usuário.
Por exemplo:

Usuário: user1; Senha: 123;
Usuário: user2; Senha: 456;

Se alguém que diz ser o usuário ‘user2’ digitar a senha ‘123’(senha incorreta para o ‘user2’) terá acesso ao seu sistema.
Um outro problema com relação a comparação de senhas é o seguinte:

Vamos supor que você já concertou esse primeiro problema e agora está comparando usuário e senha, como abaixo:

String sql = "Select senha from Login where nome = ? and senha = ?";

Se eu disser que sou o usuário ‘user1’(mesmo não sabendo sua senha) e no campo da senha digitar: ‘’ or 1 = 1
também terei acesso ao seu sistema.

Na permissão de acesso a sistemas, tem que ter esse tipo de cuidado para não permitir acessos indevidos.

Espero ter ajudado.

Mariana.Vecci

oii gente, to quase conseguindo, agora ta pegando a senha e usuario do banco certinho, mas sempre da como se fosse verdadeiro, mesmo que eu digite a senha errada ele abre o jframe com as opções,

package sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class LoginUsuarioDAO {

	public boolean validar(String nome, String senha) {
		boolean result = false;
		Connection conexao = null;
		try {
			conexao = Conexao.getConexao();
			PreparedStatement comando = conexao.prepareStatement("SELECT * FROM tabela WHERE nome = ? AND senha = ?");

			comando.setString(1, nome);
			comando.setString(2, senha);
			result = true;		
		}	

		catch (SQLException e) {   
			e.getMessage();
			System.out.println(result);
			result = false;
		}   
		System.out.println(result);   
		return result;  
	}//ta caindo sempre no true
	//a logica e ...retornou false da erro, retornou true abre a tela
}

tela

package swing;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.ImageIcon;
import javax.swing.JButton;

import sql.AcessoClienteDAO;
import sql.LoginUsuarioDAO;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class LoginJFrame extends JFrame implements ActionListener {

	private JPanel contentPane;
	private JTextField textField;
	private JPasswordField passwordField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					LoginJFrame frame = new LoginJFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public LoginJFrame() {
		setTitle("Login");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblUsurio = new JLabel("Usu\u00E1rio:");
		lblUsurio.setBounds(28, 98, 68, 14);
		contentPane.add(lblUsurio);

		JLabel lblSenha = new JLabel("Senha:");
		lblSenha.setBounds(28, 135, 68, 14);
		contentPane.add(lblSenha);

		textField = new JTextField();
		textField.setBounds(83, 95, 86, 20);
		contentPane.add(textField);
		textField.setColumns(10);

		passwordField = new JPasswordField();
		passwordField.setBounds(83, 132, 86, 20);
		contentPane.add(passwordField);

		JLabel label = new JLabel("New label");
		label.setIcon(new ImageIcon("C:\\Tortorelli\\Eclipse\\Tortorelli\\senha.jpg"));
		label.setBounds(193, 11, 219, 246);
		contentPane.add(label);

		JButton btnOk = new JButton("OK");
		btnOk.addActionListener(this);
		btnOk.setBounds(28, 177, 89, 23);
		contentPane.add(btnOk);
		btnOk.setName("btnOk");
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		Component component = (Component)e.getSource();
		if(component.getName().equals("btnOk")) {

			String nome = textField.getText();
			String senha = passwordField.getText();

			LoginUsuarioDAO dao = new LoginUsuarioDAO();
			if(dao.validar(nome,senha)) {
				 System.out.println("verdadeiro");
                 new LojaTelaPrincipal().setVisible(true);
			}else{
				System.out.println("falso");
                JOptionPane.showMessageDialog(null, "usuario ou senha invalido");
			}
			//a logica e ...retornou false da erro, retornou true abre a tela
		}
	}
}

Obrigada!

Criado 30 de novembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 3
Participantes 3