Selasa, 13 November 2012

Tutorial Java : Membuat Form Login untuk Aplikasi Desktop


Selamat datang di StripBandunk, pusat pembelajaran teknologi Informasi. Pada artikel ini kami akan membahas tentang cara membuat form login untuk aplikasi dekstop di Java menggunakan teknologi Java Swing.

  • Perangkat Lunak :
    1. NetBeans IDE 7.0.1
    2. Apache Maven 3
    3. Java Development Kit 7 update 1
    4. MySQL Server 5.1
  • Framework : Hibernate Framework 3
  • Tingkat Keterampilan : Menengah.
  • Estimasi Waktu : 1 Jam 30 Menit.
Tahap 1 – Membuat Database
Sebelum membuat aplikasinya, kita perlu membuat databasenya terlebih dahulu. Kami menggunakan sistem manajemen basis data MySQL Serve versi 5.1. Kami asumsikan database yang akan dibuat bernama stripbandunk_formlogin.
CREATE DATABASE stripbandunk_formlogin;
Tahap 2 – Membuat Project
Buatlah sebuah project Apache Maven menggunakan NetBeans IDE. Pada tutorial ini kami asumsikan Anda membuat project dengan ketentuan :
  • Project Name : FormLogin
  • GroupId : com.stripbandunk
  • Package : com.stripbandunk.formlogin
Atau sesuai dengan yang Anda inginkan.
Tahap 3 – Menambah Dependensi
Setelah Anda membuat project, tambahkanlah dependensi-dependensi yang dibutuhkan di file pom.xml.
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.7.Final</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.17</version>
</dependency>
<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.12.1.GA</version>
</dependency>
view rawpom.xmlThis Gist brought to you by GitHub.
Dependensi yang diperlukan pada pada tutorial ini adalah hibernateslf4jjavassist danmysql connector java.
Tahap 4 – Membuat Entitas
Pada tutorial ini, kita hanya akan menggunakan sebuah entitas, yaitu entitas pengguna. Entitas pengguna ini memiliki properti nama pengguna dan juga kata sandi. Nama pengguna dan kata sandi tersebut digunakan untuk melakukan proses login ke aplikasi desktop.
/*
* Copyright (c) 2011, StripBandunk and/or its affiliates. All rights reserved.
*
* http://stripbandunk.com/
*
* STRIPBANDUNK PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.stripbandunk.formlogin.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.ColumnTransformer;
@Entity
@Table(name = "tabel_pengguna")
public class Pengguna implements Serializable {
    @Id
    @Column(name = "nama_pengguna")
    private String namaPengguna;
    // ubah kata password menjadi kata yang rahasia menurut Anda
    @ColumnTransformer(read = "decode(kata_sandi, 'password')", write = "encode(?, 'password')")
    @Column(name = "kata_sandi")
    private String kataSandi;
    // getter dan setter
}
Di entitas Pengguna kita menggunakan annotation @ColumnTransformer , annotation ini digunakan untuk mengubah cara penulisan dan pembacaan sebuah kolom. Kami menggunakan fungsi encode untuk menulis dan decode untuk membaca, dimana kedua fungsi tersebut membutuhkan sebuah password untuk melakukan enkripsi dan dekripsi.
Tahap 5 – Membuat Koneksi Hibernate
Setelah membuat entitas Pengguna, sekarang Anda perlu membuat sebuah kelas yang berisikan koneksi ke database MySQL Server mengguakan Hibernate. Beri nama kelas tersebut dengan nama HibernateHelper, yang berisikan pembuatan SessionFactory untuk nanti digunakan di aplikasi.
/*
* Copyright (c) 2011, StripBandunk and/or its affiliates. All rights reserved.
*
* http://stripbandunk.com/
*
* STRIPBANDUNK PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.stripbandunk.formlogin.helper;
import com.stripbandunk.formlogin.entity.Pengguna;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.dialect.MySQL5InnoDBDialect;
public class HibernateHelper {
    private final static SessionFactory sessionFactory;
    static {
        Configuration configuration = new Configuration();
        // konfigurasi connection
        configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
        configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/stripbandunk_formlogin");
        configuration.setProperty("hibernate.connection.username", "root");
        configuration.setProperty("hibernate.connection.password", "root");
        // konfigurasi hibernate
        configuration.setProperty("hibernate.dialect", MySQL5InnoDBDialect.class.getName());
        configuration.setProperty("hibernate.hbm2ddl.auto", "update");
        // mapping entitas
        configuration.addAnnotatedClass(Pengguna.class);
        // membuat session factory
        sessionFactory = configuration.buildSessionFactory();
        // pastikan di-close saat aplikasi ditutup
        HibernateHelper.registerShutdownHook();
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    private static void registerShutdownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            public void run() {
                sessionFactory.close();
            }
        }));
    }
}
Metode registerShutdownHook() merupakan metode yang digunakan untuk memastikan bahwa SessionFactory akan di-close ketika aplikasi ditutup, walaupun Anda tidak memanggil metode SessionFactory.close();
Tahap 6 – Membuat Form Aplikasi
Untuk form aplikasi, Anda bebas membuat form seperti apapun asalkan merupakan turunan dari kelas javax.swing.JFrame. Kami tidak akan membahas tentang pembuatan aplikasinya, karena pada tutorial ini kami hanya memfokuskan ke kasus form login.
Misal pada tutorial ini kami menggunakan form seperti terlihat pada gambar diatas.
Tahap 7 – Membuat Form Login
Untuk membuat form login, gunakan kelas javax.swing.JDialog. Jangan menggunakan javax.swing.JFrame untuk membuat form login. Biasakan hanya membuat 1 JFrame untuk 1 aplikasi.
Desain tampilan form login dapat disesuaikan dengan selera Anda, contoh kami menggunakan form login sederhana dengan tampilan seperti pada gambar dibawah ini :
Untuk input nama penggunakan, gunakan JTextField dan untuk input kata sandi gunakan JPasswordField. Dan jangan lupa, agar lebih mudah diingat, ubah nama variabel JTextField nama pengguna menjadi jTextFieldNamaPengguna dan JPasswordField kata sandi menjadi jPasswordFieldKataSandi.
Tahap 8 – Membuat Login Manager
Login manager merupakan kelas yang dibuat untuk lemakukan manajemen login untuk pengguna. Kelas LoginManager tersebut akan digunakan untuk mengecek nama pengguna dan password ketika loginmenyimpan informasi pengguna yang sedang login dan juga untuk melakukan proses logout.
/*
* Copyright (c) 2011, StripBandunk and/or its affiliates. All rights reserved.
*
* http://stripbandunk.com/
*
* STRIPBANDUNK PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.stripbandunk.formlogin.helper;
import com.stripbandunk.formlogin.entity.Pengguna;
import org.hibernate.Session;
/**
*
* @author echo
*/
public class LoginManager {
    private static LoginManager loginManager;
    public static LoginManager getDefault() {
        if (loginManager == null) {
            loginManager = new LoginManager();
        }
        return loginManager;
    }
    private Pengguna pengguna;
    private LoginManager() {
        // singleton class
    }
    public Pengguna getPengguna() {
        return pengguna;
    }
    public void logout() {
        this.pengguna = null;
    }
    public boolean login(String namaPengguna, String kataSandi) {
        Session session = HibernateHelper.getSessionFactory().openSession();
        Pengguna db = (Pengguna) session.get(Pengguna.class, namaPengguna);
        session.close();
        if (db == null) {
            return false;
        } else if (!db.getKataSandi().equals(kataSandi)) {
            return false;
        } else {
            this.pengguna = db;
            return true;
        }
    }
}
Kelas LoginManager merupakan kelas singleton. Untuk menggunakan kelas LoginManager cukup menggunakan perintah LoginManager.getDefault().
Metode login() digunakan untuk melakukan proses login dengan menggunakan nama pengguna dan juga kata sandi. Hasil metode ini adalah nilai boolean, dimana jika truemaka data login valid artinya pengguna dengan nama pengguna dan kata sandi tersebut terdaftar di database, namun jika hasilnya adalah false, artinya kebalikannya.
Metode getPengguna() digunakan untuk mengambil informasi pengguna yang sekarang sedang login. Dan metode logout() digunakan ketika user akan keluar aplikasi, metode ini membuat informasi pengguna yang sedang login hilang dari LoginManager.
Tahap 9 – Menambah Aksi Login
Untuk membuat aksi login, Anda dapat menambahkan ActionListener ke tombol Login pada Form Login. Berikut adalah kode aksi tombol Login :
if (LoginManager.getDefault().login(jTextFieldNamaPengguna.getText(),
        new String(jPasswordFieldKataSandi.getPassword()))) {
    JOptionPane.showMessageDialog(this, "Selamat datang");
    setVisible(false);
} else {
    JOptionPane.showMessageDialog(this, "Maaf, anda bukan pengguna aplikasi ini");
}
Untuk melakukan proses login, gunakan metode LoginManager.login(). Jika hasilnya adalah true, maka pada kode diatas menampilkan tulisan “Selamat Datang” dan setelah itu menghilangkan Form Login. Namu jika hasilnya adalah false, pada kode diatas menampilkan tulisan “Maaf, …”.
Tahap 10 – Menjalankan Aplikasi
Untuk menjalankan aplikasi, Anda dapat mengubah kelas App yang sudah otomatis dibuat oleh Apache Maven ketika membuat project di awal.
/*
* Copyright (c) 2011, StripBandunk and/or its affiliates. All rights reserved.
*
* http://stripbandunk.com/
*
* STRIPBANDUNK PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.stripbandunk.formlogin;
import com.stripbandunk.formlogin.form.FormApplication;
import com.stripbandunk.formlogin.form.FormLogin;
import com.stripbandunk.formlogin.helper.HibernateHelper;
import javax.swing.SwingUtilities;
public class App {
    private FormApplication formApplication;
    private FormLogin formLogin;
    public App() {
        formApplication = new FormApplication();
        formLogin = new FormLogin(formApplication, true);
    }
    public void startApp() {
        formLogin.setLocationRelativeTo(formApplication);
        formApplication.setVisible(true);
        formLogin.setVisible(true);
    }
    public static void main(String[] args) {
        // init hibernate
        HibernateHelper.getSessionFactory().openSession().close();
        // jalankan aplikasi
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                App app = new App();
                app.startApp();
            }
        });
    }
}
view rawApp.javaThis Gist brought to you by GitHub.
Saat membuat FormLogin, karena merupakan kelas JDialog, jadi memerlukan parent, dimana parent nya adalah FormApplication. Dan pastikan modal nya bernilai true, hal ini dimaksudnya agar FormApplication tidak dapat digunakan selama FormLogin muncul.
Agar FormLogin muncul ditengah-tengah FormApplication, maka gunakan perintah FormLogin.setLocationRelativeTo(FormApplication)
Hasil Akhir
Sebelum menjalankan aplikasi, jangan lupa untuk menambah user ke tabletabel_pengguna di database stripbandunk_formlogin. Misal nama pengguna “stripbandunk” dan kata sandi “stripbandunk”:
INSERT INTO
   tabel_pengguna( nama_pengguna, kata_sandi )
VALUES (
   'stripbandunk', ENCODE( 'stripbandunk', 'password' )
)
Sekarang coba jalankan aplikasinya, dan login menggunakan username yang telah dibuat :D

0 komentar:

Posting Komentar

 
- ,