Uji Coba HttpsURLConnection untuk Login Form dengan Java
Dikarenakan kebutuhan pembuatan aplikasi back-end suatu website yang berorientasi gratis, penulis mencoba membuat login form menggunakan Java.
Selain karena gratis, pembuatan aplikasi Java ini hanya akan diperuntukkan untuk aplikasi pembantu, versi dekstop.
Sedangkan kedepannya, aplikasi yang akan dibuat akan lebih diorientasikan di website dan dalam bentuk Android.
Meskipun hanya sebagai aplikasi pembantu, bagaimanapun juga masalah keamanan perlu tetap dipertimbangkan.
Tetapi perlu diperhatikan, keamanan nantinya akan penulis lebih optimalkan di bagian server-nya, yaitu di kode PHP(Personal Home Page)-nya.
Berikut ini adalah kode Java, login form menggunakan JFrame:
package karyawan; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import javax.net.ssl.HttpsURLConnection; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.WindowConstants; public class LoginForm extends JFrame { private JTextField username_text; private JPasswordField password_text; private JLabel errormessage=new JLabel(" "); private boolean onsendingdata=false; public void setup() { setTitle("Login"); setLayout(new GridBagLayout()); GridBagConstraints con = new GridBagConstraints(); con.insets = new Insets(3,3,3,3); con.fill = GridBagConstraints.WEST; con.weightx=0; con.weighty=0; con.gridx=0; con.gridy=0; add(new JLabel("Username"),con); con.weightx=1; con.gridx=1; username_text=new JTextField(15); add(username_text,con); con.weightx=0; con.gridx=0; con.gridy=1; add(new JLabel("Password"),con); con.weightx=1; con.gridx=1; password_text=new JPasswordField(15); add(password_text,con); con.gridwidth=2; con.weightx=0; con.gridx=0; con.gridy=2; JButton button = new JButton("Submit"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new Thread(new Runnable(){ public void run() { if(!onsendingdata)sendLogin(); } }).start(); } }); add(button,con); con.gridwidth=2; con.weightx=0; con.gridx=0; con.gridy=3; add(errormessage,con); setSize(500,500); pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((int)(0.5*(screenSize.getWidth()-getWidth())),(int)(0.5*(screenSize.getHeight()-getHeight()))); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setVisible(true); setResizable(false); } private void sendLogin() { onsendingdata=true; errormessage.setText("Sending data!"); Map<String,String> data = new HashMap<>(); data.put("username",username_text.getText()); data.put("password",String.valueOf(password_text.getPassword())); StringBuilder sbParams = new StringBuilder(); int i = 0; for (String key : data.keySet()) { try { if (i != 0){ sbParams.append("&"); } sbParams.append(key).append("=") .append(URLEncoder.encode(data.get(key), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } i++; } HttpsURLConnection connection=null; try{ URL url = new URL("https://example.com/logindevice.php"); connection = (HttpsURLConnection)url.openConnection(); connection.setReadTimeout(15000); connection.setConnectTimeout(15000); connection.setDoInput(true); connection.setDoOutput(true); String paramsString = sbParams.toString(); DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); wr.writeBytes(paramsString); wr.flush(); wr.close(); connection.connect(); int responseCode=connection.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { errormessage.setText("Getting response!"); InputStream in = new BufferedInputStream(connection.getInputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder result = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { result.append(line); } System.out.println("result from server: " + result.toString()); }else errormessage.setText("Error code "+responseCode); } catch (IOException e) { errormessage.setText(e.toString()); onsendingdata=false; } finally { if (connection != null) { connection.disconnect(); } this.dispose(); onsendingdata=false; } } }
Sedangkan halaman logindevice.php penerima request hanya berisi kode seperti dibawah ini:
<?php session_start(); header("Content-Type: application/json; charset=UTF-8"); $myresult=array("username"=>$_POST["username"],"password"=>$_POST["password"]); echo json_encode($myresult); ?>
Cara kerjanya adalah aplikasi login form, menggunakan fungsi HttpsURLConnection mengirimkan data username dan password, dengan metode POST.
Jika alamat tujuan bertipe http, bukan https, dapat digunakan fungsi HttpURLConnection.
Dan apabila berhasil, server akan dapat menampilkan hasil kurang lebih sebagaimana berikut:
result from server: {"username":"admin","password":"admin"}
Percobaan di atas, hanya sebagai contoh cara dan koneksi dengan HttpsURLConnection dapat dilakukan.
Tinggal menambahkan fungsi parsing JSON (JavaScript Object Notation) dan validasi username dan password ke database.
Penulis menggunakan Netbeans 8.1 dan JDK (Java Development Kit) versi 8, serta penulis langsung menggunakan hosting website yang penulis sewa, bukan di localhost.
Komentar
Posting Komentar