Autenticacion de usuarios en java con MySQL

En algunos sistemas a veces un requerimiento es que se manejen prinvilegios y por lo tanto usuarios, este es un ejemplo muy sencillo que muestra como se podria autentificar a los usuarios para entrar al sistema. Sin mas rodeos muestro el ejemplo y espero que a alguien mas le sirva, primero que nada quiero mostrar la estructura de la tabla que se usa en este programa.

Aca la imagen:

 

Estructura de tabla de usuarios

Estructura de tabla de usuarios

Aca la imagen de la ventana de login, obviamente el usuario escribe su nombre de usuario (previamente asignado por el administrador del sistema) y su password. y debe dar click en el boton aceptar para entrar:

 

Ventana de login

Ventana de login

en caso de que el usuario haya introducido algun dato incorrecto se mostrara un mensaje avisando, igualmente se mostrara un mensaje correspondiente cuando se deje algun campo vacio:

 

Mensaje error ventana login

Mensaje error ventana login

en caso de que el usuario escriba los datos correctos se debe mostrar la interfaz principal del sistema, que en este caso e diseñado una muy sencilla y es esta:

 

Ventana principal del sistema

Ventana principal del sistema

Por ultimo muestro el codigo de de la ventana de login
VentanaLogin.java

 
//				Instituto Tecnologico de Zacatepec
//  	Descripcion:  Ventana de login para autenticar un usuario para accesar a un sistema
//  	Author: Gonzalo Silverio   gonzasilve@hotmail.com
//		Archivo: VentanaLogin.java


package testmysql;
import javax.swing.*;
import java.io.*;
import java.sql.*;
import java.awt.Panel.*;
import java.awt.*;
import java.awt.event.*;

public class VentanaLogin extends JFrame
{
        private JTextField txtUser, txtPass;
        private JLabel lblUser, lblPass;
        private JButton btnAceptar, btnCancelar;
        String usuario, elPassword;

    VentanaLogin()
    {

        Container contenedor = getContentPane();
        contenedor.setLayout(new FlowLayout());

        // crear etiqueta y cuadro de texxto del usuario
        txtUser = new JTextField(10);
        lblUser = new JLabel("Usuario: ");
        txtUser.setToolTipText("Escriba su nombre de usuario");        
        contenedor.add( Box.createVerticalStrut(50) );
        contenedor.add(lblUser);
        contenedor.add(txtUser);

        //crear etiqueta y cuadro de texxto del pw
        txtPass = new JPasswordField(10);
        lblPass = new JLabel("Contraseña: ");
        txtPass.setToolTipText("Escriba su contraseña");
        contenedor.add(lblPass);
        contenedor.add(txtPass);

        //Crear y agregar los botones 
        btnAceptar = new JButton("Aceptar");
        //establecer Boton aceptar por defecto
        getRootPane().setDefaultButton(btnAceptar);

        btnCancelar = new JButton("Cancelar");
        contenedor.add(btnAceptar);
        contenedor.add(btnCancelar);



      // Crear un escuchador al boton Aceptar 
    	ActionListener escuchadorbtnAceptar = new ActionListener()
    	{
        	public void actionPerformed(ActionEvent evt)
        	{
                try
                {                    
                    //chekar si el usuario escrbio el nombre de usuario y pw
                    if (txtUser.getText().length() > 0 && txtPass.getText().length() > 0 )
                    {
                        // Si el usuario si fue validado correctamente
                        if( validarUsuario( txtUser.getText(), txtPass.getText() ) )    //enviar datos a validar
                        {
                            // Codigo para mostrar la ventana principal
                            setVisible(false);
                            VentanaPrincipal ventana1 = new VentanaPrincipal();
                            ventana1.mostrar();


                        }
                        else
                        {
                            JOptionPane.showMessageDialog(null, "El nombre de usuario y/o contrasenia no son validos.");
                            JOptionPane.showMessageDialog(null, txtUser.getText()+" " +txtPass.getText() );
                            txtUser.setText("");	//limpiar campos
                            txtPass.setText("");        
                            
                            txtUser.requestFocusInWindow();
                        }

                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null, "Debe escribir nombre de usuario y contrasenia.\n" +
                            "NO puede dejar ningun campo vacio");
                    }

                } catch (Exception e)
                {
                    e.printStackTrace();
                }
         		
        	}
   		};
    	btnAceptar.addActionListener(escuchadorbtnAceptar);      // Asociar escuchador para el boton Aceptar


      // Agregar escuchador al boton Cancelar
    	ActionListener escuchadorbtnCancelar=new ActionListener()
    	{
        	public void actionPerformed(ActionEvent evt)
        	{
         		System.exit(0);         // terminar el programa
        	}
   		};
    	btnCancelar.addActionListener(escuchadorbtnCancelar);      // Asociar escuchador para el boton Cancelar
        setTitle("Autentificacion de usuarios");
        setSize(400,150);           // Tamanio del Frame 
        setResizable(false);       // que no se le pueda cambiar el tamanio 
        //Centrar la ventana de autentificacion en la pantalla
        Dimension tamFrame=this.getSize();//para obtener las dimensiones del frame
        Dimension tamPantalla=Toolkit.getDefaultToolkit().getScreenSize();      //para obtener el tamanio de la pantalla
        setLocation((tamPantalla.width-tamFrame.width)/2, (tamPantalla.height-tamFrame.height)/2);  //para posicionar
        setVisible(true);           // Hacer visible al frame 

    }   // fin de constructor

    // Metodo que conecta con el servidor MYSQL y valida los usuarios
    boolean validarUsuario(String elUsr, String elPw)  throws IOException
    {
    	try
		{
   			//nombre de la BD: bdlogin
             //nombre de la tabla: usuarios
             //								id		integer	auto_increment not null     <--llave primaria
             //                   campos:    usuario 	char(25)
             //                              password char(50)
             
            Connection unaConexion  = DriverManager.getConnection ("jdbc:mysql://localhost/bdlogin","root", "root");
            // Preparamos la consulta
            Statement instruccionSQL = unaConexion.createStatement();
            ResultSet resultadosConsulta = instruccionSQL.executeQuery ("SELECT * FROM usuarios WHERE usuario='"+elUsr+"' AND password='"+ elPw+"'");

            if( resultadosConsulta.first() )        // si es valido el primer reg. hay una fila, tons el usuario y su pw existen
                return true;        //usuario validado correctamente
            else
                return false;        //usuario validado incorrectamente
                
		} catch (Exception e)
		{
   			e.printStackTrace();
            return false;
		}

    }
    
    public static void main(String[] args)
    {
        VentanaLogin prueba = new VentanaLogin();
        prueba.setDefaultCloseOperation(prueba.EXIT_ON_CLOSE);
    }

}

y ahora el codigo fuente para crear la ventana principal:


//				Instituto Tecnologico de Zacatepec
//  	Descripcion:  	Ventana principal del sistema del sistema
//  	Author: Gonzalo Silverio   gonzasilve@hotmail.com
//		Archivo: VentanaPrincipal.java


package testmysql;
import javax.swing.*;
import java.awt.*;

public class VentanaPrincipal extends JFrame
{
    VentanaPrincipal()
    {   
    	setSize(400,400);
        setTitle("ventana principal");        
        setLayout(new BorderLayout());
        add(Box.createHorizontalStrut(100),BorderLayout.WEST);
        add(new JLabel("Ventana principal del proyecto "),BorderLayout.CENTER);       
        
        setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void mostrar()
    {
        setVisible(true);
    }

}

…bueno hasta pronto y espero te sirva de algo esta cosa ( xD ), comentarios son bienvenidos o si quieres el codigo, ya sabes, basta con dejar tu correo

Acerca de gonzasilve
Freelance Web Developer.

395 Responses to Autenticacion de usuarios en java con MySQL

  1. salvador says:

    me podrías proporcionar el codigo gracias sscipres@gmail.com

  2. emel castaño says:

    hola me gustaria tener el codigo gracias
    e-cast@hotmail.com

  3. Gerardo Alain Loredo Moyeda says:

    Como podria hacer para mostrar en la pantalla principal el nombre del usuario que se conecto en el login se que se puede hacer en php y en c# pero aqui en java nunca lo he hecho si pudieras ayudatme

  4. Pingback: Hgenryp | Pearltrees

  5. mucha gracias parcero me ayudaste demaciado en esa validacion tan facil y sencillo como la escribes y explicar

  6. Excelente parcero muchas gracias

  7. Lois says:

    Por favor me puedes ayudar con el pakage testmysql

  8. jose says:

    Hola me gustaría tener el código correo: loko25jose2@gmail.com

  9. Sara Osorio says:

    Hola, soy nueva en Java, podrías por favor compartirme el código de este programa. Muchas gracias.

  10. nico says:

    muy bueno me gustaria tener el codigo nicobertti@gmail.com

  11. Hola Gonzálo, aunque ha pasado tiempo de ésta publicación, nos sigue siendo muy util. Si pudieras pasarme el código te lo agradezco. jaradgg@gmail.com

  12. Marco Antonio says:

    Gracias por el aporte, muy bueno, te dejo mi correo para que me envies el codigo monitoreo_5@hotmail.com

  13. rafa lopez says:

    Hola amigo que buen aporte me podrías pasar el codigo gracias!

  14. Adan says:

    Amigo que conector usaste el driver baje unos pero no los toma???
    por favor

  15. Josue says:

    en la parte
    Connection unaConexion = DriverManager.getConnection («jdbc:mysql://localhost/bdlogin»,»root», «root»);
    // Preparamos la consulta
    Statement instruccionSQL = unaConexion.createStatement();
    ResultSet resultadosConsulta = instruccionSQL.executeQuery («SELECT * FROM usuarios WHERE usuario='»+elUsr+»‘ AND password='»+ elPw+»‘»);

    if( resultadosConsulta.first() ) // si es valido el primer reg. hay una fila, tons el usuario y su pw existen
    return true; //usuario validado correctamente
    else
    return false; //usuario validado incorrectamente

    Solo estas validando si existe el usuario, y que pasa con la contraseña?
    por ejemplo solo necesito saber el nombre del usuario para poder entrar a la cuenta?

  16. JONATHAN says:

    OYE DE VERDAD GRACIAS YA LE HABÍA BATALLADO MUCHO CON EL LOGGIN

  17. arel says:

    hola me podrias mandar el codigo por email gracias 🙂

  18. Alejando says:

    hermano y no tienes la parte para en caso de que no exista el usuario agregarlo

  19. erick says:

    me gustaria me pudieras mandar el codigo funcionando

  20. Sixto says:

    no me deja conectar a la base de datos y si tengo instalado y ejecutando MySQL
    probe que el usuario y password fueran validos y si son.
    me puedes explicar un poco de las lineas donde se genera la conexion, te lo agradeceria enormemente.

    Saludos

  21. Tavo says:

    Muchas gracias te lo agradesco es lo unico que me hacia falta

  22. Santiago says:

    Me funciono completamente, muchas gracias!!

  23. diego says:

    me ayudaste mucho te lo agradezco (Y)

Deja un comentario