Login em sistema!

43 respostas
felipexavier

galera procurei tudo pelo forum, no youtube, no google, só achei coisas sobre java script e javaweb.
alguem sabe onde encontro alguma coisa ensinando a criar um login, criei um software para gerenciamento de livros, e preciso que so o admin consiga usar esse software. e pra isso fiz 1 tela de login e já criei a tabela no banco de dados, usuario: admin e senha: admin. Mas não acho nada para me ajudar a criar, alguém pode me ajudar?

43 Respostas

drsmachado

felipexavier:
galera procurei tudo pelo forum, no youtube, no google, só achei coisas sobre java script e javaweb.
alguem sabe onde encontro alguma coisa ensinando a criar um login, criei um software para gerenciamento de livros, e preciso que so o admin consiga usar esse software. e pra isso fiz 1 tela de login e já criei a tabela no banco de dados, usuario: admin e senha: admin. Mas não acho nada para me ajudar a criar, alguém pode me ajudar?


Web ou desktop?

Web:
http://www.google.com.br/#hl=pt-BR&xhr=t&q=login+jsp&cp=7&pf=p&sclient=psy&site=&source=hp&aq=0&aqi=&aql=&oq=login+j&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=ae8731fa1277d9bf&biw=1280&bih=919

Swing:
http://www.google.com.br/#sclient=psy&hl=pt-BR&source=hp&q=login+swing&aq=f&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=ae8731fa1277d9bf&biw=1280&bih=919

lina

Oi,

Não entendi nada. Você já fez a tela? Porque não controla isso no próprio banco… dando permissões (grants) em só algumas tabelas para determinado usuário?

Tchauzin!

felipexavier

fiz a tela no netbeans, o resto do codigo ta todo feito, mas quero que tenha um login, pra eu aprender mesmo.

quero fazer login para que so o admin consiga acessar o software, ficou mais claro?

drsmachado e obrigado, é desktop, to lendo os links…

drsmachado

Postei o link aí.
Pesquisa, tenta e, se der erro, posta aqui.

felipexavier

usando isso no botão é fácil

if (tflogin.equals("admin") && pfsenha.equals("admin"))

mas eu preciso que ele pegue no banco de dados. To fazendo uns testes e já posto aqui, mas se alguém tiver sugestão será muito bem-vinda

L

faz um metodo que retorno o objeto login do seu banco e compare com o que voce esta passando

felipexavier

da uma olhada no que fiz até agora, ta falando que uma classe não existe!

private void btloginActionPerformed(java.awt.event.ActionEvent evt) {
        if (tflogin.getText().equals("") || pfsenha.getText().equals("")) {
            JOptionPane.showMessageDialog(null,"Os campos login e senha não podem ser vazios");  
            return; //Vamos usar o return para cair fora de uma vez, assim não precisamos do els
        }
        bd.conectaDB();
        if (bd.estaConectada())
            System.out.println("BD abriu");
            String login=tflogin.getText();
            String senha=pfsenha.getText();
            System.out.println("Logn: "+login+" Senha: "+senha);
            ResultSet dados=bd.buscaRegistros("select * from usuarios where nome=");
            String a = null;
        try {
            a = dados.getString("nome");
        } catch (SQLException ex) {
            Logger.getLogger(ControleEstoquePrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
            String b = null;
        try {
            b = dados.getString("senha");
        } catch (SQLException ex) {
            Logger.getLogger(ControleEstoquePrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
                if (login.equals(a) && senha.equals(b)){
                    JOptionPane.showMessageDialog(null,"Seu login foi feito com sucesso");
                    frame.setVisible(true);
                }else{
                    JOptionPane.showMessageDialog(null,"Seu Usuário ou Senhas está incorreto");
                } 
         bd.desconectaDB();
        
        // TODO add your handling code here:
    }

tá horrivel né?!

drsmachado

1, tá horrível sim, pois você mistura tudo (Apresentação, DAO, negócios).
2 - Qual a classe que é apontada como faltante?

felipexavier

tipo nunca fiz um sistema de login, to fazendo sozinho, tentando sozinho, desculpa.

deu um erro assim agora:
>>> BD abriu
Logn: admin Senha: admin
>>>Erro na conexão Banco de Dados: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Botão Login:
private void btloginActionPerformed(java.awt.event.ActionEvent evt) {
        if (tflogin.getText().equals("") || pfsenha.getText().equals("")) {
            JOptionPane.showMessageDialog(null,"Os campos login e senha não podem ser vazios");  
            return; //Vamos usar o return para cair fora de uma vez, assim não precisamos do els
        }
        bd.conectaDB();
        if (bd.estaConectada())
            System.out.println("BD abriu");
            String login=tflogin.getText();
            String senha=pfsenha.getText();
            System.out.println("Logn: "+login+" Senha: "+senha);
            ResultSet dados=bd.buscaRegistros("select * from usuarios where nome=");
            String a = null;
        try {
            a = dados.getString("nome");
        } catch (SQLException ex) {
            Logger.getLogger(ControleEstoquePrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
            String b = null;
        try {
            b = dados.getString("senha");
        } catch (SQLException ex) {
            Logger.getLogger(ControleEstoquePrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
                if (login.equals(a) && senha.equals(b)){
                    JOptionPane.showMessageDialog(null,"Seu login foi feito com sucesso");
                    frame.setVisible(true);
                }else{
                    JOptionPane.showMessageDialog(null,"Seu Usuário ou Senhas está incorreto");
                }
bd.desconectaDB();
        
        // TODO add your handling code here:
    }




[code]
classe TestBD:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controleestoque;


 
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TesteBD {
    
    // Atributos Banco
    private int BD=1;                        // 1-msql, 2-access, 
    private String servidor="localhost";
    private String porta="3306";
    private String banco="controle_estoque";
    private String usuario="root";
    private String senha="root";
     
    // Atributos ODBC
    private String driver;
    private String strConexao;
    private Connection conexao;
    private Statement stmt;
    private ResultSet rs;
    
    // Instancia Unica
    private static TesteBD instancia;
    // Construtores
    public TesteBD()
    {
        switch (BD)
        {
            case 1: 
                driver = "com.mysql.jdbc.Driver";
                strConexao = "jdbc:mysql://"+servidor+"/"+banco+"?user="+usuario+"&password="+senha;
                //strConexao = "jdbc:mysql://localhost/controleacademico?user=root&password=lilica89";
                break;
        }
    }
    public static TesteBD getIntancia()
    {
        if(instancia==null) instancia = new TesteBD();
        return instancia;
    }
    public TesteBD(int BD, String servidor, String porta, String banco, String usuario, String senha)
    {
        this.BD = BD;
        this.servidor = servidor;
        this.banco = banco;
        this.porta = porta;
        this.usuario = usuario;
        this.senha = senha;
        switch (BD)
        {
            case 1: 
                driver = "com.mysql.jdbc.Driver";
                strConexao = "jdbc:mysql://"+servidor+":"+porta+":"+banco;
                break;
        }
    }

    // M?odos Set/Get
    
    // M?odos
    public void conectaDB()
    {
        // Faz a conexão
        try
        {
            Class.forName(driver);
            conexao = DriverManager.getConnection(strConexao);
        } catch(SQLException erro)
        {
        System.out.println(">>> Erro - Conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }catch(ClassNotFoundException erro)
        {
            System.out.println(">>> Erro  - Classe não encontrada = " + erro.getMessage());
            System.exit(0);
           
        }
    }
    
    public ResultSet buscaRegistros(String sql)
    {
         // Faz a conexão
        try
        {
            stmt = conexao.createStatement();
            rs = stmt.executeQuery(sql);
        } catch(SQLException erro)
        {
            System.out.println(">>>Erro na conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
        return rs;
    }       
    
    public void desconectaDB()
    {
        try { 
        if(!conexao.isClosed()) conexao.close();
        } catch(SQLException erro)
        {
            System.out.println("Erro na conex? Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
    }
    
    public void liberaResultados()
    {
        try{
        if(!rs.isClosed()) rs.close();
        if(!stmt.isClosed()) stmt.close();
        } catch(SQLException erro)
        {
            System.out.println("Erro na conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
    }
    
    public boolean estaConectada()
    {
        if(conexao==null)
            return false;
        else
            return true;
    }
    
    public boolean executa(String sql)
    {
        // Faz a conexão
        boolean ret;
        try
        {
            stmt = conexao.createStatement();
            ret = stmt.execute(sql);
            return ret;
        } catch(SQLException erro)
        {
            System.out.println("Erro na conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
        return false;
    }
}
drsmachado
ResultSet dados=bd.buscaRegistros("select * from usuarios where nome=");

Nome = a que?

felipexavier

eu tirei isso, era esse mesmo o problema.

mas mesmo assim ainda não ta comparando com o que tem no banco de dados. Toda hora mesmo colocando Login e senha “admin” não vai. da a mensagem de erro.

JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto");
drsmachado

Justamento por que você não diz o que o maldito tem que fazer.
Cara, você tem dois dados que solicita ao usuáiro, certo? Somente e apenas somente se você buscar no banco o(s) usuário(s) que possuem a chave específica “login” igual ao passado e, com aquela senha específica irão ter permissão, certo?

Sendo assim, o que você deve fazer?

Tempo pra pensar

felipexavier

eu tenho que conseguir comparar os dados que colocaram nos campos login e senha, com o login(nome no bd) e senha do banco de dados, certo?!
mas como eu faço isso, como eu faço esse teste?

nome = ‘admin’ no código?

obs: parece que ta irritado, desculpa a ignorancia no assunto, primeira vez que tento.

felipexavier
ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+login);
drsmachado

felipexavier:

obs: parece que ta irritado, desculpa a ignorancia no assunto, primeira vez que tento.

Sou sempre assim.
Então, você precisa colocar ambos na query. Se houver algum retorno, o usuário existe e a senha coincide.
Senão, ou usuário não existe ou senha não confere ou ambos.

drsmachado

Isso trará todos os usuários que possuam login = ao passado.
Caso teu sistema restrinja (e deve fazer isto), é só comparar, verificando se a senha = senha que foi informada.
Senão, já coloca aí

ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+login " and senha = "+senha);

E faz como eu disse…

L

posso dar uma dica pra voce, usa uma classe de persistencia pra trabalhar com o seu banco, nao fica escrevendo as querys na tela e alem de seu codigo ficar horrivel e ninguem entender nada

felipexavier

não deu o que me passou, ai coloquei assim:

ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+login);
            ResultSet dados1=bd.buscaRegistros("select * from usuarios where senha="+senha);
colocar na query?! seria isso?
public ResultSet buscaRegistros(String sql, String sql2)
    {
              // Faz a conexão
        try
        {
            stmt = conexao.createStatement();
            rs = stmt.executeQuery(sql);
            stmt = conexao.createStatement();
            rs = stmt.executeQuery(sql2);
            
        } catch(SQLException erro)
        {
            System.out.println(">>>Erro na conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
        return rs;
    }

quando coloco isso os ResultSet dão erro.

felipexavier

lineofgol não sei como fazer isso, é a primeira vez que to fazendo isso, mas já vou começar a ler sobre persistencia.

L

qual o banco que voce esta utilizando?

temos essa tecnologia em nossa mão, é pra ser utilizada, da uma pesquisada voce vai ver como vai ser mais simples ainda

ate mais.

felipexavier

lineofgol uso MySql. Vou tentar terminar primeiro, ai depois pesquiso e implemento para melhorar

drsmachado
felipexavier:
não deu o que me passou, ai coloquei assim:
ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+login);
            ResultSet dados1=bd.buscaRegistros("select * from usuarios where senha="+senha);
colocar na query?! seria isso?
public ResultSet buscaRegistros(String sql, String sql2)
    {
              // Faz a conexão
        try
        {
            stmt = conexao.createStatement();
            rs = stmt.executeQuery(sql);
            stmt = conexao.createStatement();
            rs = stmt.executeQuery(sql2);
            
        } catch(SQLException erro)
        {
            System.out.println(">>>Erro na conexão Banco de Dados: " + erro.getMessage());
            System.exit(0);
        }
        return rs;
    }

quando coloco isso os ResultSet dão erro.

Releia a minha resposta novamente, já tem um exemplo lá.

felipexavier

precisa de aspas simples para comprar não?
olha:

ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+"'"+login+"'"); ResultSet dados1=bd.buscaRegistros1("select * from usuarios where senha="+"'"+senha+"'");

e tenho buscaRegistros e buscaRegistros1;
eu li sua resposta

como assim ao passado?e como eu faço para comparar a senha?
eu tento colocar um return no buscaRegistro, mas lá não pode.

drsmachado

DESENHANDO

ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+login " and senha = "+senha);

Conseguiu entender?

felipexavier

já fiz isso

to tentando desde que parei de postar! fiquei lendo e relendo o que falou.

felipexavier

mas o meu ficou desse jeito, porque o jeito que você fez não tem como fica um ponto de interregação !

ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+"'"+login+"' and senha="+"'"+senha+"'");

mas mesmo assim, ainda está dando erro! =/

erro:
BD abriu
Login: admin Senha: admin
24/06/2011 17:19:56 controleestoque.ControleEstoquePrincipal btloginActionPerformed
GRAVE: null
java.sql.SQLException: Before start of result set

drsmachado

Ok, então, com esta query você coloca no ResultSet dados nenhum resultado (caso login/senha não sejam validados) ou um único.
Então, só precisa percorrer o ResultSet

while(dados.next()){
 String nome = rs.getString("nome");
}

E aí deve obter o nome.

felipexavier

desculpa, não to entendo.

felipexavier

alguem pode me ajudar não consigo de jeito nenhuma comparar o que o usuário entra nos tflogin e no sfsenha com os no banco de dados

private void btloginActionPerformed(java.awt.event.ActionEvent evt) {
        if (tflogin.getText().equals("") || pfsenha.getText().equals("")) {
            JOptionPane.showMessageDialog(null,"Os campos login e senha não podem ser vazios");  
            return; //Vamos usar o return para cair fora de uma vez, assim não precisamos do els
        }
        bd.conectaDB();
        if (bd.estaConectada())
            System.out.println("BD abriu");
            String login=tflogin.getText();
            String senha=pfsenha.getText();
            System.out.println("Login: "+login+" Senha: "+senha);
            
            ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+"'"+login+"' and senha="+"'"+senha+"'");
            try
        {
            while(dados.next())
            {
                String a=dados.getString("nome");
                String b=dados.getString("senha"); 
            
            }
        } catch (SQLException erro)
        {
            System.out.println(">>> Erro  - Classe não encontrada = " + erro.getMessage());
            System.exit(0);
        }
                
                if (login.equals(a) && senha.equals(b)){
                    JOptionPane.showMessageDialog(null,"Seu login foi feito com sucesso");
                    frame.setVisible(true);
                    
                }else{
                    JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto");
                    tflogin.setText(null);
                    pfsenha.setText(null);
                }
        bd.desconectaDB();
        
        // TODO add your handling code here:
    }
felipexavier

o erro está nessa linha

if (login.equals(a) && senha.equals(b)){

o a e o b

Anime

Oi,

Por que não compara direto…

"SELECT nome FROM TB_acesso  WHERE nome ='"+ tf_usuario.getText()+"' and senha  = '"+ tf_senha.getText()+"'";

Sobre persistência de dados…

felipexavier

Oi *-*

então, eu acabei de resolver '-'
o drsmachado ajudou muito, agora que entendi, depois de ficar lendo...

Anime obrigado viu *--* eu nem sabia que podia fazer isso, vou salvar para testar depois...

olha como ficou, é primeira vez que faço:

private void btloginActionPerformed(java.awt.event.ActionEvent evt) {
        if (tflogin.getText().equals("") || pfsenha.getText().equals("")) {
            JOptionPane.showMessageDialog(null,"Os campos login e senha não podem ser vazios");  
            return; //Vamos usar o return para cair fora de uma vez, assim não precisamos do els
        }
        bd.conectaDB();
        if (bd.estaConectada())
            System.out.println("BD abriu");
            String login=tflogin.getText();
            String senha=pfsenha.getText();
            System.out.println("Login: "+login+" Senha: "+senha);
            
            ResultSet dados=bd.buscaRegistros("select * from usuarios where nome ="+"'"+login+"' and senha="+"'"+senha+"'");
            try
        {
            while(dados.next())
            {
                String a=dados.getString("nome");
                String b=dados.getString("senha"); 
                
           if (login.equals(a) && senha.equals(b)){
                    JOptionPane.showMessageDialog(null,"Seu login foi feito com sucesso");
                    frame.setVisible(true);
                    
                }
           JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto");
           tflogin.setText(null);
           pfsenha.setText(null);
            }
        } catch (SQLException erro)
        {
            System.out.println(">>> Erro  - Classe não encontrada = " + erro.getMessage());
            System.exit(0);
        }
                
                
        bd.desconectaDB();
        
        // TODO add your handling code here:
    }
felipexavier

agora se eu quisesse mandar uma mensagem

JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto"); tflogin.setText(null); pfsenha.setText(null);

caso o login não seja o certo, como faço?

Anime

Que bom que conseguiu, deve estar radiante rsrs…

Da uma olhada nesse material sobre persistência de dados… :wink:

felipexavier

to até bobo aqui kkkk
primeira vez, comecei a mexer era 11h da manhã -----

vce viu a minha pergunta? poderia me ajudar? pls

Anime

felipexavier:
agora se eu quisesse mandar uma mensagem

JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto"); tflogin.setText(null); pfsenha.setText(null);

caso o login não seja o certo, como faço?

if (login.equals(a) && senha.equals(b)){  
                    JOptionPane.showMessageDialog(null,"Seu login foi feito com sucesso");  
                    frame.setVisible(true);  
                      
                }
                 else{  
                 JOptionPane.showMessageDialog(null,"Seu Usuário ou Senha está incorreto");  
                 tflogin.setText(null);  
                 pfsenha.setText(null);  
               }
felipexavier

assim não foi, eu tentei.

sabe como deixar o JFrame impossivel de se dimensionar? de mudar o tamanho?

Anime

felipexavier:
assim não foi, eu tentei.

sabe como deixar o JFrame impossivel de se dimensionar? de mudar o tamanho?

Pesquise sobre método setSize,setBounds

http://www.java2s.com/Tutorial/Java/0240__Swing/ResizingandpositioningaJFrame.htm

Está usando IDE?

felipexavier

estou sim, Netbeans!

S

felipexavier:
assim não foi, eu tentei.

sabe como deixar o JFrame impossivel de se dimensionar? de mudar o tamanho?

essa eu sei! auehauh

seuframe.setResizable(false);

felipexavier

sunsite:
felipexavier:
assim não foi, eu tentei.

sabe como deixar o JFrame impossivel de se dimensionar? de mudar o tamanho?

essa eu sei! auehauh

seuframe.setResizable(false);

obrigado sunsite.

J

Desse jeito uma simples injeção de sql pode quebrar seu esquema de login facilmente. Procure sobre PreparedStatement e como nosso amigo acima falou, não misture tudo!
Ou se preferir, começe a estudar sobre Hibernate ou JPA. Fuja da concatenação!

felipexavier

então to estudando isso sim, esse foi o primeiro sistema de login, queria conseguir fazer. Agora estou lendo sobre Persistência, para melhorar ele. Mas muito obrigado pela dica.

Criado 24 de junho de 2011
Ultima resposta 27 de jun. de 2011
Respostas 43
Participantes 7