Days
Hours
Minutes
Seconds

Promo Grand Opening

15% OFF

Khusus Pelanggan Baru

Tutorial Java #15: Membuat Login Dengan Java dan MySQL

Tentu, ini artikel tentang Tutorial Java #15: Membuat Login dengan Java dan MySQL.


 

 

Membuat sistem login adalah langkah penting dalam membangun hampir semua aplikasi yang memerlukan otentikasi pengguna. Dalam tutorial ini, kita akan menggabungkan konsep-konsep yang telah kita pelajari (JDBC, PreparedStatement, dan penanganan database) untuk membangun aplikasi konsol sederhana yang memungkinkan pengguna untuk login menggunakan username dan password yang disimpan di database MySQL.

 

Prasyarat

 

Pastikan Anda telah memiliki:

  1. Driver JDBC untuk MySQL.
  2. Database kampus yang telah kita buat sebelumnya.
  3. Di dalam database tersebut, kita akan membuat tabel baru bernama users.

 

Langkah 1: Menyiapkan Tabel users

 

Kita akan membuat tabel users untuk menyimpan username dan password. Untuk alasan keamanan, jangan pernah menyimpan password dalam teks biasa. Kita akan mensimulasikan hash sederhana untuk demonstrasi ini.

SQL

USE kampus;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL
);

-- Masukkan satu user contoh (password 'rahasia' disimulasikan sebagai hash)
-- Dalam aplikasi nyata, Anda harus menggunakan algoritma hashing yang kuat
INSERT INTO users (username, password) VALUES ('admin', 'hashed_password_rahasia');

 

Langkah 2: Menulis Kode Java

 

Sekarang kita akan menulis kode Java yang akan meminta username dan password dari pengguna, lalu memeriksa apakah kredensial tersebut cocok dengan data di database.

Java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class LoginApp {

    // Konfigurasi Database
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/kampus";
    static final String USER = "root";
    static final String PASS = "password";

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String username, password;

        System.out.println("--- Aplikasi Login ---");
        System.out.print("Username: ");
        username = input.nextLine();
        System.out.print("Password: ");
        password = input.nextLine();

        if (autentikasi(username, password)) {
            System.out.println("\nLogin Berhasil! Selamat datang, " + username + ".");
        } else {
            System.out.println("\nLogin Gagal! Username atau password salah.");
        }

        input.close();
    }

    public static boolean autentikasi(String username, String password) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        boolean isAuthentic = false;

        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // Perintah SQL untuk mencari user berdasarkan username dan password
            String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            pstmt.setString(2, password); // Ingat, ini hanya untuk contoh

            rs = pstmt.executeQuery();

            // Jika ResultSet memiliki baris (artinya ada user yang cocok), maka login berhasil
            if (rs.next()) {
                isAuthentic = true;
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            // Tutup semua sumber daya
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return isAuthentic;
    }
}

 

Penjelasan Kode

 

  1. Fungsi autentikasi(): Fungsi ini adalah inti dari sistem login. Ia menerima username dan password sebagai argumen dan mengembalikan nilai boolean (true jika kredensial cocok, false jika tidak).
  2. PreparedStatement: Kita menggunakan PreparedStatement untuk membuat query yang aman. Ini sangat penting karena input username dan password berasal langsung dari pengguna, menjadikannya target utama untuk SQL Injection.
  3. Kondisi SQL: WHERE username = ? AND password = ?. Perintah ini mencari baris di tabel users di mana kedua kolom (username dan password) cocok dengan nilai yang diberikan.
  4. ResultSet: Jika pstmt.executeQuery() menemukan baris yang cocok, maka rs.next() akan mengembalikan true. Ini adalah cara kita mengetahui bahwa user berhasil login. Jika tidak ada baris yang cocok, rs.next() akan mengembalikan false.
  5. Penanganan Error: Blok try-catch-finally memastikan bahwa koneksi database dan sumber daya lainnya ditutup dengan benar, bahkan jika terjadi kesalahan.

 

Penting: Keamanan Password

 

Contoh di atas menyimpan dan membandingkan password dalam bentuk teks biasa (meskipun kita sebut “hashed_password” di SQL). Dalam aplikasi nyata, ini adalah praktik yang sangat buruk dan sangat tidak aman.

  • Hashing: Saat pengguna mendaftar, Anda harus menggunakan algoritma hashing yang kuat (seperti BCrypt atau Argon2) untuk mengubah password mereka menjadi string yang tidak dapat dibalik (hash).
  • Verifikasi: Saat pengguna login, Anda akan mengambil hash yang disimpan di database dan membandingkannya dengan hash dari password yang dimasukkan pengguna. Proses ini dilakukan tanpa pernah menyimpan atau membandingkan password teks biasa.

Contoh sederhana dengan BCrypt (memerlukan library eksternal):

Java

// Untuk Registrasi
String hashedPassword = BCrypt.hashpw("rahasia", BCrypt.gensalt());
// Simpan `hashedPassword` ke database

// Untuk Login
// Ambil hash yang tersimpan dari database
String storedHash = ...; 
if (BCrypt.checkpw("rahasia", storedHash)) {
    // Password cocok
} else {
    // Password tidak cocok
}

 

Kesimpulan

 

Membuat sistem login adalah proyek yang sangat baik untuk menguji pemahaman Anda tentang integrasi Java dengan database. Dengan menggunakan JDBC dan, yang paling penting, PreparedStatement untuk keamanan, Anda dapat membangun sistem otentikasi yang berfungsi. Ingatlah selalu untuk menggunakan teknik hashing yang tepat untuk melindungi password pengguna di lingkungan nyata.

Wawasan Terbaru

Gemini_Generated_Image_wfw5uwwfw5uwwfw5
Mengenal Dunia Grafis: Dari Piksel Hingga Vektor, Kekuatan Visual di Era Digital
Gemini_Generated_Image_b6dimfb6dimfb6di
Mengenal Foundation: Kerangka Kerja Front-End Profesional untuk Web Responsif
Gemini_Generated_Image_sx3ztpsx3ztpsx3z
CSS
Mempercantik Website dengan CSS: Seniman di Balik Tampilan Web 🎨
Gemini_Generated_Image_e013qke013qke013
Mengenal HTML: Fondasi dari Setiap Halaman Website 🌐
Gemini_Generated_Image_ldki4nldki4nldki
Menyelami Dunia Coding: Seni Berbicara dengan Komputer
Gemini_Generated_Image_dpvliydpvliydpvl
Menguasai GIT: Fondasi Penting dalam Dunia Pengembangan Perangkat Lunak
Gemini_Generated_Image_sqcib9sqcib9sqci
Tutorial Python #12: Mengenal Jenis-jenis Operator dalam Python
Gemini_Generated_Image_o1bw3do1bw3do1bw
Memahami Tipe Data Dictionary dalam Python
Gemini_Generated_Image_ko4ixfko4ixfko4i
Mengenal Tipe Data Set dalam Python
Gemini_Generated_Image_1xop7m1xop7m1xop
Tuple dalam Python: Pengenalan dan Tutorial

Wawasan Serupa

Gemini_Generated_Image_kl3k6wkl3k6wkl3k
Gemini_Generated_Image_3ubmyt3ubmyt3ubm
Gemini_Generated_Image_ygm1bmygm1bmygm1
Gemini_Generated_Image_llan5yllan5yllan

Ceritakan Detail Proyekmu

Mulai dari 30K aja, solusi IT kamu langsung jalan tanpa drama.

Kata Mereka Tentang Solusi Coding

Dipercaya oleh lebih dari 200++ client untuk menyelesaikan proyeknya dengan total 250++ proyek dari berbagai jenis proyek