Dalam bab ini berisi kesimpulan pembahasan dan saran-saran yang berguna bagi pembaca yang terkait dengan sistem informasi yang
ANALISA DAN PERANCANGAN SISTEM
3.2. Perancangan Database
4.1.4. Implementasi Sistem
4.1.4.1. Menu Mahasiswa 1.Registrasi
Pada saat mahasiswa melakukan registrasi account email,
mahasiswa mengisikan data-data kemuadian mahasiswa mendapatkan
username dan password baru. Data password didapat dari karakter dan
angka random, password awal yang diberi terdiri dari 8-10 karakter. Di
bawah ini merupakan listing membuat password secara random:
public static String randomstring(int lo, int hi) { int n = rand(lo, hi);
Random rand = new Random(36); int randNumber;
byte b[] = new byte[n]; for (int i = 0; i < n; i++) { randNumber = rand.nextInt(); if (randNumber < 5) {
b[i] = (byte) rand('0', '9'); } else {
b[i] = (byte) rand('a', 'z'); }
}
return new String(b, 0); }
private static int rand(int lo, int hi) {
java.util.Random rn = new java.util.Random(); int n = hi - lo + 1;
int i = rn.nextInt() % n; if (i < 0) {
i = -i; }
}
public static String randomstring() { return randomstring(8, 10); }
Penjelasan listing program di atas:
Kelas Random merupakan untuk membangkitkan bilangan dan
karakter bilangan acak. Pada method rand di atas membangkitkan bilangan
acak menurut waktu sehingga setiap kali dijalankan maka akan dihasilkan
bilangan acak yang berbeda.
Setelah sukses melakukan registrasi kemudian data account
email mahasiswa berupa username dan password tersebut di print dan
dikirim ke alternatif email juga ke email admin Bapsi. Di bawah ini
merupakan listing untuk mengirim email:
private String SMTP_HOST_NAME = "smtp.gmail.com";//server keluar private String SMTP_PORT = "465";
private String emailMsgTxt = "Test Message Contents"; private String emailSubjectTxt = "A test from gmail"; private String emailFromAddress = "[email protected]";
private String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private String[] sendTo;
public static void main(String args[]) throws Exception { }
public void sendMessage(String recipients[], String subject, String message, String from) throws MessagingException { Security.addProvider(new
com.sun.net.ssl.internal.ssl.Provider()); boolean debug = true;
Properties props = new Properties();
props.put("mail.smtp.host", getSMTP_HOST_NAME()); props.put("mail.smtp.auth", "true"); props.put("mail.debug", "true"); props.put("mail.smtp.port", getSMTP_PORT()); props.put("mail.smtp.socketFactory.port", getSMTP_PORT()); props.put("mail.smtp.socketFactory.class", getSSL_FACTORY()); props.put("mail.smtp.socketFactory.fallback", "false"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "sanata2009usd"); } }); session.setDebug(debug);
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from); msg.setFrom(addressFrom);
InternetAddress[] addressTo = new
InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]); } msg.setRecipients(Message.RecipientType.TO, addressTo); msg.setSubject(subject); msg.setContent(message, "text/plain"); Transport.send(msg); }
public String getSMTP_HOST_NAME() { return SMTP_HOST_NAME;
}
public void setSMTP_HOST_NAME(String SMTP_HOST_NAME) { this.SMTP_HOST_NAME = SMTP_HOST_NAME;
}
public String getSMTP_PORT() { return SMTP_PORT;
}
public void setSMTP_PORT(String SMTP_PORT) { this.SMTP_PORT = SMTP_PORT;
}
public String getSSL_FACTORY() { return SSL_FACTORY;
}
public void setSSL_FACTORY(String SSL_FACTORY) { this.SSL_FACTORY = SSL_FACTORY;
}
public String getEmailMsgTxt() { return emailMsgTxt;
}
public void setEmailMsgTxt(String emailMsgTxt) { this.emailMsgTxt = emailMsgTxt;
}
public String getEmailSubjectTxt() { return emailSubjectTxt;
this.emailSubjectTxt = emailSubjectTxt; }
public String getEmailFromAddress() { return emailFromAddress;
}
public void setEmailFromAddress(String emailFromAddress) { this.emailFromAddress = emailFromAddress;
}
public String[] getSendTo() { return sendTo;
}
public void setSendTo(String[] sendTo) { this.sendTo = sendTo;
}
Pengiriman email menggunakan sumber email dari
“[email protected]” maka yang digunakan adalah setting gmail. Dalam
mengirimkan email program mengeset server terlebih dahulu pada
SMTP_HOST_NAME, dan Port nya dismpan pada SMTP_PORT.
Di bawah ini merupakan listing untuk mengirim email dan
mencetak hasil registrasi email mahasiswa.
String message = "Username dan password anda untuk email USD" + "\nUsername : " + username + "\nPassword : " + pass; String[] to = {email2.getText(), "[email protected]"}; System.out.println(email2.getText()); String nimbuatquery = nim2.getText();
SendEmail send = new SendEmail();
send.setEmailFromAddress("[email protected]");
send.sendMessage(to, "Regristrasi Email USD", message, send.getEmailFromAddress());
String query = "SELECT Username,'" + pass + "' AS Password" + " FROM account_email" +
" WHERE nim = '" + nimbuatquery + "'"; System.out.println("query nya " + query); Connection koneksi = login.koneksi; Statement statement;
statement = koneksi.createStatement();
ResultSet resultSet = statement.executeQuery(query);
JOptionPane.showMessageDialog(this, "Proses Registrasi Sukses"); menu baru = new menu();
baru.setVisible(true);
JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(resultSet);
System.out.println("Filling report...");
String print = JasperFillManager.fillReportToFile("report/ReportTest.jasper", new
HashMap(), resultSetDataSource);
JasperViewer.viewReport(print, false, false); System.out.println("Done!");
resultSet.close(); statement.close(); } catch (Exception ex) {
Logger.getLogger(registrasi2.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(this, "Proses Kirim Email Gagal, Silahkan Cek Kembali");
}
Penjelasan potongan listing di atas:
Listing di atas merupakan program untuk kirim email. Isi pesan
yang akan dikirim disimpan dalam variable message. Pesan dikirim ke
alternative email mahasiswa dan ke email admin yaitu ke
[email protected], dengan menggunakan alamat sumber
dari [email protected]. Kemudian proses mencetak hasil registrasi
dengan menggunakan jesperReport.
4.1.4.1.2. Ubah Password
Untuk mengubah password mahasiswa mengisikan data NIM,
password lama, password baru dan konfirmasi password baru. Dalam
membuat password baru dapat menggunakan kekuatan password. Berikut ini
public String CheckPasswordStrength(String passwd) {
int upper = 0, lower = 0, numbers = 0, special = 0, length = 0; int strength = 0, intScore = 0;
String strVerdict = "none", strLog = ""; Pattern p; Matcher m; if (passwd == null) { return "gagal"; } // PASSWORD LENGTH length = passwd.length(); if (length < 6) { intScore = (intScore + 5);
} else if (length >= 6 && length <= 8) // length between 5 and 7 {
intScore = (intScore + 6);
} else if (length > 8) // length between 8 and 15 { intScore = (intScore + 10); } // LETTERS p = Pattern.compile(".??[a-z]"); m = p.matcher(passwd);
while (m.find()) // [verified] at least one lower case letter { lower += 1; } if (lower > 0) { intScore = (intScore + 1); } // NUMBERS p = Pattern.compile(".??[0-9]"); m = p.matcher(passwd);
while (m.find()) // [verified] at least one number { numbers += 1; } if (numbers > 0) { intScore = (intScore + 1); if (numbers > 1) { intScore = (intScore + 1); if (numbers > 2) { intScore = (intScore + 1); } } } // COMBOS
if (lower > 0 && numbers > 0) // [verified] both letters and numbers { intScore = (intScore + 1); } if (intScore < 10) { strVerdict = "weak";
} else if (intScore >= 10 && intScore < 15) { strVerdict = "mediocre"; } else { strVerdict = "strong"; } System.out.println(strVerdict + " - " + intScore + "\n" + strLog);
// Does it meet the password policy? try {
int min = Integer.parseInt(PASSWORD_MIN_LENGTH); if (length < min) { return "gagal"; } } catch (Exception e) { } // undefined try {
int max = Integer.parseInt(PASSWORD_MAX_LENGTH); if (length > max) { return "gagal"; } } catch (Exception e) { } return strVerdict; }
Penjelasan potongan listing di atas:
Dalam pengecekan kekuatan password dipengaruhi oleh
beberapa faktor yaitu panjang password, karakter huruf, karakter angka dan
karakter yang sama.
4.1.4.1.3. Lupa Password
Apabila mahasiswa lupa password, maka akan diberi password
baru. Dengan cara mengisikan data jawaban dari pertanyaan rahasia yang
telah dipilih pada waktu registrasi. Berikut ini adalah potongan listing untuk
mengecek data jawaban mahasiswa:
String pertanyaan = lblPertanyaan.getText();
String sql = "select Jawaban from account_email where NIM like '" + nim + "'";
Statement stmt = sambung.createStatement(); ResultSet rs = stmt.executeQuery(sql); rs.first();
String jawaban = rs.getString("Jawaban"); System.out.print(jawaban);
stmt.close();
if (txtJawaban.getText().equalsIgnoreCase(jawaban)) { this.setVisible(false);
lupaPass3 baru = new lupaPass3(nim,email); baru.setVisible(true);
} else {
JOptionPane.showMessageDialog(rootPane, "jawaban anda salah"); }
4.1.4.2. Menu Admin