Problemas com verificação de senha [RESOLVIDO]

3 respostas
A

Boa tarde galera, to com um probleminha aqui na hora de verificar a senha atual do usuario para que alteração de senha seguinte.: tenho um tela de alteração de senha onde o cara seleciona o usuario que desejar alterar a senha ja JTable e os dados vão para os seus respestivos textfields, quando abro a tela para alteração de senha seleciono o usuario ja JTable para e os dados vão para os TextFields, digita a senha atual a nova senha e confirma a senha, caso a senha atual seja inválida ele lança uma mensagem caso não ele verifica a confirmação, se tiver tudo certo ele altera a senha, mas tem um problema, caso eu altere tente alterar a senha de outro usuário logo após a alteração de senha do primeiro, ele não confere a senha atual passa direto, por que desse erro???
Vo postar todos os métodos referentes a essa parte de alteração de senha... Obrigado!! :mrgreen:

MÉTODO QUE BUSCA UMA LISTA DE SENHA
public List<Usuario> buscaSenha() throws SQLException
    {

        Connection conn = Conexao.getConexao();
        String sql = "Select senha From usuario";
        PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        List<Usuario> lista = new ArrayList<Usuario>();

        while(rs.next())
        {
             Usuario usuario = new Usuario(rs.getString("senha"));
             lista.add(usuario);
        }
        rs.close();
        stmt.close();
        return lista;
     }
MÉTODO QUE RECEBE A SENHA COMO PARAMETRO E VERIFICA NA LISTA
private boolean verificaSenha(String senha) throws SQLException
    {
        UsuarioDAO dao = new UsuarioDAO();
        List<Usuario> lista = dao.buscaSenha();
        for(Usuario user : lista)
        {
            if(senha.equals(user.getSenha()))
            {
                result = true;
                         break;
            }
        }
        return result;
    }
BOTÃO ALTERA SENHA
private void bt_senhaActionPerformed(java.awt.event.ActionEvent evt) {                                         

        if(evt.getSource() == bt_senha)
        {
            UsuarioNegocio UN = new UsuarioNegocio();
            int row = tabela_altera_usuario.getSelectedRow();
            UsuarioModel model = (UsuarioModel)tabela_altera_usuario.getModel();
            String nova = tf_nova.getText();
            String confirma = tf_confirmacao.getText();

            Usuario user = model.get(row);
            try {
                if (!this.verificaSenha(tf_senha.getText())) {
                    JOptionPane.showMessageDialog(null, "Senha atual Invalida");
                    tf_senha.setText("");
                }else
                    if(!nova.equals(confirma))
                    {
                         JOptionPane.showMessageDialog(null, "Confirmaçao de senha invalida");
                         tf_confirmacao.setText("");
                    }else{
                         UN.alterarSenhaUsuario(user, nova);
                          JOptionPane.showMessageDialog(null, "Alterado com Sucesso!");
                          tf_senha.setText("");
                          tf_nova.setText("");
                          tf_confirmacao.setText("");
                    }
            } catch (SQLException ex) {
                Logger.getLogger(BuscaAlteracaoVendedor.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

3 Respostas

A

Vlw galera, ja resolvi… :XD: … a solução era simplismente declarar a variável result como local dentro do método verificaSenha()

thiagopooh

Cara, percebi que você resolveu o problema.
Mas tava olhando seu codigo e o seu codigo de verifica senha ta meio errado.

Ele pega todas a senha do banco e se uma for igual ele valida.
Pensa assim, desse modo se sem querer outro usuario tiver a mesma senha digitada, ele vai validar.

A Dica é que você busque a senha somente do usuario que você está tentando.

bom… é só uma observação.

Nicolas_Fernandes

thiagopooh:
Cara, percebi que você resolveu o problema.
Mas tava olhando seu codigo e o seu codigo de verifica senha ta meio errado.

Ele pega todas a senha do banco e se uma for igual ele valida.
Pensa assim, desse modo se sem querer outro usuario tiver a mesma senha digitada, ele vai validar.

A Dica é que você busque a senha somente do usuario que você está tentando.

bom… é só uma observação.

Concordo com o thiago!
Normalmente, quando você quer trocar a senha de um usuário, você busca o objeto dele no Banco de Dados.

public Usuario buscarUsuario(String nome, String senha)
{
   String query = "Select * From Usuarios Where Nome = '?' And Senha = '?'";
   // O resto vem aqui. Retorna null se não achar nada, e o objeto do usuário se achar alguma coisa.
}

Para alterar a senha de um usuário, você monta um novo objeto em cima daquele existente. Você já tem o ID dele mesmo, então é só alterar os outros dados que quiser e fazer um método de alterar mais ou menos assim:

public void alterarRegistro(Usuario usuario, Connection connection) throws Exception
{
   String query = "Update Usuarios Set Nome = ?, Senha = ? Where ID = ?";
   PreparedStatement statement = connection.prepareStatement(query);
   statement.setString(1, usuario.getNome());
   statement.setString(2, usuario.getSenha());
   statement.setInt(3, usuario.getId());

   statement.executeUpdate();
}

Você busca o usuário João com a senha 123 e ID 1. Você altera seus dados, mudando o nome do usuário para João Pedro e a senha para 123456. O ID continua intacto. Então, faz uso de um método como o alterarRegistro() acima e boa! Basicamente por aí!

Espero ter ajudado, abraços!

Criado 30 de setembro de 2010
Ultima resposta 1 de out. de 2010
Respostas 3
Participantes 3