terça-feira, 9 de fevereiro de 2016

Criando sistema de login simples - MySql + Java

Ola pessoal,  hoje quero compartilhar com vocês como criar um sistema simples de login, utilizando MySql e Java.

( lembrando que não vamos utilizar nenhum tipo de criptografia para senhas )

O que vamos precisar ? 

  - Java Eclipse ou NetBeans ou até mesmo outra IDE de sua preferencia.

MySql instalado 

Classe de conexão com o banco de dados

Bom tendo os requisitos acima funcionando corretamente vamos ao que interessa.

Primeiro vamos criar uma tabela onde iremos salvar os dados de login

CREATE TABLE login (
id int not null auto_increment,
usuario varchar(20) not null,
senha varchar(8) not null,
primary key (id))


Pronto agora vamos inserir algum dado na tabela para que possamos testar posteriormente nosso sistema de login. 

INSERT INTO login VALUES (null, 'admin', 'admin') 

Tendo feito isso vamos criar nossa janela no java.


public class credencial extends JFrame {

    private JPanel contentPane;
    private JTextField txtusuario;
    private JPasswordField passsenha;
   
   
   
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    credencial frame = new credencial();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
   
    conexao banco = new conexao(); // Instanciando nossa classe responsável pela conexão com o banco de dados

   
    public credencial() {
       
       
        setLocationRelativeTo(null);
        setResizable(false);
        setTitle("Identificação");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 426, 212);
        contentPane = new JPanel();
        contentPane.setBackground(SystemColor.window);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JLabel lblIdentificao = new JLabel("Identificação");
        lblIdentificao.setBounds(144, 0, 139, 39);
        contentPane.add(lblIdentificao);
       
        JLabel lblUsuario = new JLabel("Usuario");
        lblUsuario.setBounds(24, 65, 70, 15);
        contentPane.add(lblUsuario);
       
        JLabel lblsenha = new JLabel("Senha");
        lblsenha.setBounds(24, 92, 70, 15);
        contentPane.add(lblsenha);
       
        txtusuario = new JTextField();
        txtusuario.setBounds(112, 63, 219, 19);
        contentPane.add(txtusuario);
        txtusuario.setColumns(10);
       
        JButton btnEntrar = new JButton("Entrar");
        btnEntrar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               
                try {
                   
                    banco.AbrirConexao(); // Abrindo uma conexão
                    banco.stmt= banco.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
                    String query;
                    query = "SELECT * FROM login"; // Comando sql para exibir tudo que houver na tabela login
                    banco.resultset = banco.stmt.executeQuery(query);
                   
                    int stop=0; // variavel usada para flag ( não encontrei outro metodo estou aberto a sugestões)
                   
                    while(banco.resultset.next() && stop == 0 ) {
                       
                       
                        // Comparando dados inseridos com a tabela
 

                      if(txtusuario.getText().equals(banco.resultset.getString("usuario")) && passsenha.getText().equals(banco.resultset.getString("senha")))
                        {
                            stop = 1; //Caso for encontrado o usuário na tabela stop recebe 1 e o programa continua
                        } else {
                            stop = 0; // Se não for encontrada o usuário na tabela stop recebe 0 e o programa não continua
                        }
                   
                    }
                   
                    if ( stop == 1) {
                       
                        TelaPrincipal telap = new TelaPrincipal(); // Senha correta abre outra tela (JFrame) no meu caso "TelaPrincipal"

ou utilize System.out.println(" Login correto")
 
                        telap.setVisible(true); //Torna a tela Principal visível
                        dispose();// faz com que a tela de login desapareça após abrir tela principal
                       
                       
                    } else {
                       
                        JOptionPane.showMessageDialog(null, "usuario ou senha incorretos"); //caso stop receber 0 sera exibido a mensagem
                    }
                   
                    banco.FecharConexao(); // fecha nossa conexão com o banco de dados
                   
                } catch ( Exception ec) {}
               
            }
        });
        btnEntrar.setBounds(166, 136, 117, 25);
        contentPane.add(btnEntrar);
        passsenha = new JPasswordField();
        passsenha.setBounds(112, 90, 219, 19);
        contentPane.add(passsenha);
         
        } 
    }



No final teremos uma tela parecida com esta:





 Basta agora inserir em usuario e senha " admin e admin " e clicar em entrar





5 comentários:

  1. Sou um pouco novo em java, como crio essa classe, com o form. N estou entendendo

    ResponderExcluir
    Respostas
    1. Neste caso utilizei o Swing e criei um JFrame no Eclipse e a função de checagem de banco de dados é adicionada somente no botão " Entrar " todo o resto foi criado na aba desinger.

      Excluir
  2. Supondo que o admin tenha certos privilégios e usuários comuns não, como faria? Polimorfismo ou variável para checar a autorização do usuário?

    ResponderExcluir
    Respostas
    1. Já fiz testes utilizando variáveis para fazer a checagem nunca cheguei a utilizar polimorfismo neste caso. Se não for um sistema muito complexo de login creio que utilizar variáveis seja uma boa escolha.

      Excluir
  3. Poker Tournaments - CasinoTrade.org
    The latest Poker Tournaments! Find all the latest poker Tournaments! 윌리엄 힐 Enjoy the w88 코리아 thrill of Texas Hold'em, Limit 유로 스타 사이트 & Omaha, Omaha and Texas Hold'em on 호벳 our 일본 야구 분석 사이트 site!

    ResponderExcluir