Ejercicio en Java [Login] [SOLUCIONADO]

A lo largo de la trayectoria de cualquier programador en Java, surge la necesidad de diseñar e implementar un sistema de inicio de sesión. Dicho sistema se utiliza frecuentemente en una multitud de aplicaciones, desde programas de escritorio hasta aplicaciones web. Aprender a construir uno de estos desde cero puede ser una herramienta vital.

Para comenzar, una de las formas más sencillas de implementar una función de inicio de sesión en Java, es mediante el uso de Java Swing para la interfaz gráfica y la estructura previa de un sistema de usuarios.

Un ejemplo básico de implementación podría ser:

import javax.swing.*;

public class Login {
    
    private static final String USERNAME = "user";
    private static final String PASSWORD = "pass";

    public static void main(String[] args) {
        String usr = JOptionPane.showInputDialog("Usuario:");
        String pwd = JOptionPane.showInputDialog("Contraseña:");

        if (USERNAME.equals(usr) && PASSWORD.equals(pwd)) {
            JOptionPane.showMessageDialog(null, "Inicio de sesión exitoso");
        } else {
            JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrecto");
        }
    }
}

En este caso, nos estamos basando en una autenticación estática, es decir, el inicio de sesión se realiza contra una serie de credenciales preestablecidas. Aunque esta no es la forma más segura o eficiente de implementar un principio de sesión, proporciona una base sólida para entender su funcionamiento y establecer un punto de partida.

Como paso siguiente, exploraremos cómo adaptar este código para interactuar con una base de datos con usuarios y contraseñas.

Para esto, utilizaremos un ejemplo básico con JDBC (Java Database Connectivity) y una base de datos SQLite:

import java.sql.*;

public class Login {
    
    public static void main(String[] args) {
        String url = "jdbc:sqlite:mydatabase.db";
        
        try(Connection conn = DriverManager.getConnection(url);
            Statement stmt = conn.createStatement();) {

            String usr = JOptionPane.showInputDialog("Usuario:");
            String pwd = JOptionPane.showInputDialog("Contraseña:");
            
            ResultSet rs = stmt.executeQuery("SELECT * FROM Users WHERE username='" + usr + "' AND password='" + pwd + "'");

            if (rs.next()) {
                JOptionPane.showMessageDialog(null, "Inicio de sesión exitoso");
            } else {
                JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrecto");
            }

        } catch(SQLException e) {
            e.printStackTrace();
        }
    }
}

Este método es bastante más seguro que el anterior, ya que nos permite ajustar las credenciales disponibles dependiendo de la información de nuestra base de datos. Sin embargo, este código también tiene sus inconvenientes. Al concatenar nuestro input directamente en la consulta SQL, nos exponemos a la posibilidad de un SQL Injection. Este es un tipo de ataque en el que un usuario malintencionado podría manipular nuestras consultas SQL para acceder a información que no debería. Para mitigar este riesgo, es necesario emplear sentencias preparadas.

A continuación se presenta un ejemplo de cómo emplear las sentencias preparadas para evitar el riesgo de ataques SQL Injection:

import java.sql.*;

public class Login {
    
    public static void main(String[] args) {
        String url = "jdbc:sqlite:mydatabase.db";
        
        try(Connection conn = DriverManager.getConnection(url);
            PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM Users WHERE username=? AND password=?")) {

            String usr = JOptionPane.showInputDialog("Usuario:");
            String pwd = JOptionPane.showInputDialog("Contraseña:");
            
            pstmt.setString(1, usr);
            pstmt.setString(2, pwd);

            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {
                JOptionPane.showMessageDialog(null, "Inicio de sesión exitoso");
            } else {
                JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrecto");
            }

        } catch(SQLException e) {
            e.printStackTrace();
        }
    }
}

El proceso de inicio de sesión es una parte fundamental de muchas aplicaciones. Conocer cómo implementarlo correctamente en Java es una habilidad crucial para las personas interesadas en la programación. Esperamos que esta guía te haya servido para resolver tus dudas sobre cómo realizar un ejercicio de inicio de sesión en Java.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad