Praktikum Java Semester 7: Part 1
Praktikum Java Semester 7: Part 2
Praktikum Java Semester 7: Part 3
Praktikum Java Semester 7: Part 4
Praktikum Java Semester 7: Part 5
Buat package utils buat class MD5 dan isikan dengan
public class MD5 {
public static String getMd5(String input)
{
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes());
BigInteger no = new BigInteger(1, messageDigest);
String hashtext = no.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}Class ini berfungsi untuk melakukan enkripsi pada string password supaya bisa dicocokkan dengan data password yang ada pada table.
Pada package model, buat class Pengguna dan isikan dengan
public class Pengguna {
Connection connection;
private int id;
private String username;
private String password;
private String namaLengkap;
private boolean isAdmin;
public Pengguna(Connection connection) {
this.connection = connection;
}
public Pengguna(int id, String username, String namaLengkap, boolean isAdmin) {
this.id = id;
this.username = username;
this.namaLengkap = namaLengkap;
this.isAdmin = isAdmin;
}
public Pengguna login(){
Pengguna pengguna = null;
String loginSQL = "SELECT * FROM pengguna WHERE username = ? AND password = ?";
PreparedStatement ps;
try {
ps = this.connection.prepareStatement(loginSQL);
String md5Password = MD5.getMd5(this.password);
ps.setString(1, this.username);
ps.setString(2, md5Password);
ResultSet rs = ps.executeQuery();
if(rs.next()){
pengguna = new Pengguna(
rs.getInt(1),
rs.getString(2),
rs.getString(4),
rs.getBoolean(5)
);
}
} catch (SQLException ex) {
System.out.println("Gagal login");
}
return pengguna;
}
}Jangan lupa untuk Generate Getter and Setter untuk semua atribut pada class Pengguna.
Method login() pada Pengguna mengubah atribut password kedalam md5Password menggunakan class MD5 yang sebelumnya sudah dibuat. Method ini akan me-return object Pengguna yang bisa diambil id, nama lengkap, dan level usernya.
Pada package view.admin Buat JFrame AdminMainFrame dan isikan

- JPanel: Properties->background: [102,16,242]
- JLabel
- JLabel: name->lbNamaLengkap
- JButton: name->btUbahPassword
- JButton: name->btJenisBarang
- JButton
- JButton
- JButton
- JButton
- JButton
- JButton
- JButton: name->btTutup
Masuk pada bagian Source dan tambahkan atribut Pengguna beserta setter-nya, letakkan sebelum constructor
Pengguna pengguna;
public void setPengguna(Pengguna pengguna){
this.pengguna = pengguna;
}
public AdminMainFrame() {
initComponents();
}Ganti extends javax.swing.JFrame menjadi
public class AdminMainFrame extends CustomFrameKarena JenisBarang sudah punya frame bisa ditambahkan pada btJenisBarang
private void btjenisBarangActionPerformed(java.awt.event.ActionEvent evt) {
JenisBarangViewFrame frame = new JenisBarangViewFrame();
frame.customShow();
} Tambahkan method untuk btTutup dan formWindowActivated
private void btTutupActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
lbNamaLengkap.setText(pengguna.getNamaLengkap());
} Pada package view buat package baru cashier dan buat JFrame CashierMainFrame dan isikan

- JPanel: Properties->background: [102,16,242]
- JLabel
- JLabel: name->lbNamaLengkap
- JButton: name->btUbahPassword
- JButton
- JButton
- JButton: name->btTutup
Sama seperti pada AdminMainFrame, masuk pada bagian Source dan tambahkan atribut Pengguna beserta setter-nya, letakkan sebelum constructor
Pengguna pengguna;
public void setPengguna(Pengguna pengguna){
this.pengguna = pengguna;
}
public CashierMainFrame() {
initComponents();
}Ganti extends javax.swing.JFrame menjadi
public class CashierMainFrame extends CustomFrameTambahkan method untuk btTutup dan formWindowActivated
private void btTutupActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
lbNamaLengkap.setText(pengguna.getNamaLengkap());
} Pada package view buat package baru auth dan buat JFrame LoginFrame dan isikan

- JPanel: Properties->background: [102,16,242]
- JLabel
- JLabel
- JTextField: name->tfUsername
- JLabel
- JPasswordField: name->tfPassword
- JButton: name->btBatal
- JButton: name->btLogin
Ganti extends javax.swing.JFrame menjadi
public class LoginFrame extends CustomFramePada btLogin tambahkan
private void btLoginActionPerformed(java.awt.event.ActionEvent evt) {
Database db = new Database();
Connection connection = db.getConnection();
Pengguna pengguna = new Pengguna(connection);
String stringPassword = new String(tfPassword.getPassword());
pengguna.setUsername(tfUsername.getText());
pengguna.setPassword(stringPassword);
pengguna = pengguna.login();
if(pengguna != null){
if(pengguna.isIsAdmin()){
dispose();
AdminMainFrame frame = new AdminMainFrame();
frame.setPengguna(pengguna);
frame.customShow();
}else{
dispose();
CashierMainFrame frame = new CashierMainFrame();
frame.setPengguna(pengguna);
frame.customShow();
}
}else{
JOptionPane.showMessageDialog(null, "Login gagal");
}
} Pada btBatal tambahkan
private void btBatalActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
} Terakhir pada class Main ubah method main-nya menjadi
public static void main(String[] args) {
LoginFrame frame = new LoginFrame();
frame.customShow();
}Struktur project pada akhir Part 4 ini:

Praktikum Java Semester 7: Part 1
Praktikum Java Semester 7: Part 2
Praktikum Java Semester 7: Part 3
Praktikum Java Semester 7: Part 4
Praktikum Java Semester 7: Part 5