Dokumen tersebut membahas tentang tiga konsep utama yaitu RPC (Remote Procedure Call), SOAP (Simple Object Access Protocol), dan REST (Representational State Transfer). RPC memungkinkan mengakses prosedur pada komputer lain, SOAP adalah standar untuk pertukaran informasi antar aplikasi, dan REST menggunakan konsep perpindahan state melalui link HTTP.
1. Dokumen ini membahas tentang RPC, REST, dan SOAP, yaitu protokol untuk memanggil prosedur jarak jauh.
2. Secara garis besar dijelaskan pengertian, komponen, fitur, dan contoh implementasi dari RPC menggunakan SunRPC.
3. Arsitektur dan keuntungan serta kekurangan SOAP juga diuraikan secara singkat.
Laporan ini melakukan skanning port dan probing jaringan menggunakan Nmap dan Hping3 untuk mengetahui layanan apa saja yang tersedia pada beberapa host. Percobaan menggunakan berbagai opsi Nmap seperti -sF, -sX, -sN dan -sS untuk memetakan port yang terbuka, tertutup, atau terfilter. Hping3 digunakan untuk skanning ICMP. Hasilnya menunjukkan port dan layanan apa saja yang tersedia pada masing-m
Port adalah mekanisme yang mengidentifikasi layanan dan proses dalam jaringan. Terdapat tiga jenis port: well-known port (0-1023), registered port yang didaftarkan IANA, dan dynamically assigned port yang ditetapkan sistem operasi. Beberapa port penting adalah port 20 dan 21 untuk FTP, port 25 untuk SMTP, port 80 untuk HTTP, dan port 110 untuk POP3.
Dokumen tersebut membahas tentang tiga konsep utama yaitu RPC (Remote Procedure Call), SOAP (Simple Object Access Protocol), dan REST (Representational State Transfer). RPC memungkinkan mengakses prosedur pada komputer lain, SOAP adalah standar untuk pertukaran informasi antar aplikasi, dan REST menggunakan konsep perpindahan state melalui link HTTP.
1. Dokumen ini membahas tentang RPC, REST, dan SOAP, yaitu protokol untuk memanggil prosedur jarak jauh.
2. Secara garis besar dijelaskan pengertian, komponen, fitur, dan contoh implementasi dari RPC menggunakan SunRPC.
3. Arsitektur dan keuntungan serta kekurangan SOAP juga diuraikan secara singkat.
Laporan ini melakukan skanning port dan probing jaringan menggunakan Nmap dan Hping3 untuk mengetahui layanan apa saja yang tersedia pada beberapa host. Percobaan menggunakan berbagai opsi Nmap seperti -sF, -sX, -sN dan -sS untuk memetakan port yang terbuka, tertutup, atau terfilter. Hping3 digunakan untuk skanning ICMP. Hasilnya menunjukkan port dan layanan apa saja yang tersedia pada masing-m
Port adalah mekanisme yang mengidentifikasi layanan dan proses dalam jaringan. Terdapat tiga jenis port: well-known port (0-1023), registered port yang didaftarkan IANA, dan dynamically assigned port yang ditetapkan sistem operasi. Beberapa port penting adalah port 20 dan 21 untuk FTP, port 25 untuk SMTP, port 80 untuk HTTP, dan port 110 untuk POP3.
TFTP adalah protokol transfer file sederhana yang menggunakan UDP sebagai transportnya. TFTP dikembangkan untuk perangkat yang memiliki sumber daya terbatas seperti diskless workstation. TFTP hanya mendukung operasi read dan write file secara sederhana tanpa fitur kompleks seperti autentikasi atau representasi data yang dimiliki FTP.
Port TCP dan UDP digunakan untuk mengidentifikasi proses dan layanan yang terkoneksi di jaringan TCP/IP. Port dibagi menjadi tiga jenis yaitu well-known port (0-1023), registered port (1024-49151), dan dynamically assigned port (1024-65536) yang dapat dialokasi sesuai kebutuhan. Well-known port merepresentasikan layanan standar yang ditetapkan IANA.
Dokumen tersebut memberikan penjelasan tentang pemindaian jaringan menggunakan Nmap untuk mendeteksi layanan apa saja yang dijalankan pada host sasaran. Nmap dapat mendeteksi nomor port, nama layanan, status port, sistem operasi, dan informasi lainnya. Dokumen juga menjelaskan beberapa teknik pemindaian port menggunakan Nmap seperti connect scan, SYN scan, FIN scan, dan lainnya.
Port dalam protokol TCP/IP memungkinkan komputer mendukung beberapa sesi koneksi dan mengidentifikasi aplikasi dan layanan dalam jaringan. Port dibagi menjadi well-known (0-1023), registered (1024-49151) dan dynamically assigned (1024-65536)
Transport layer bertugas melakukan komunikasi antara komputer dalam jaringan dengan menggunakan dua protokol, yaitu TCP dan UDP. TCP bersifat connection-oriented dan menjamin sampainya data sedangkan UDP bersifat connectionless tanpa pengakuan penerimaan data. Kedua protokol menggunakan port dan socket untuk mengidentifikasi aplikasi sumber dan tujuan komunikasi.
Bab 7 membahas protokol transport layer TCP dan UDP. TCP menyediakan koneksi berorientasi, manajemen aliran, dan pemulihan kesalahan sedangkan UDP bersifat tidak terkoneksi dan tidak handal. Port dan socket digunakan untuk mengidentifikasi proses pada host. TCP digunakan oleh aplikasi seperti telnet, FTP, SMTP, dan HTTP.
1. Telnet adalah protokol jaringan yang memungkinkan akses jarak jauh ke server melalui koneksi teks tanpa enkripsi, sehingga sudah jarang digunakan karena rawan disadap. 2. SSH digunakan sebagai pengganti Telnet karena mengenkripsi seluruh komunikasi untuk keamanan yang lebih baik. 3. Perbedaan utama Telnet dan SSH adalah Telnet hanya mengenkripsi sebagian isi payload sedangkan SSH mengenkripsi seluruhny
Tugas 1 analisis paket network protocol dengan menggunakan tools wiresharkEka Putuasduki
Dokumen tersebut membahas analisis paket jaringan menggunakan Wireshark untuk melihat protokol yang terlibat dalam komunikasi data antar komputer. Wireshark digunakan untuk menangkap paket-paket protokol yang ditransmisikan ketika mengakses website, sehingga setiap protokol dan aktivitas jaringan dapat diamati dan dianalisis.
Dokumen tersebut membahas tentang tiga protokol komunikasi antar sistem yaitu RPC (Remote Procedure Call), SOAP (Simple Object Access Protocol), dan REST (Representational State Transfer). RPC memungkinkan pengaksesan prosedur yang berada di komputer lain, SOAP menggunakan protokol HTTP untuk pertukaran objek, sedangkan REST menggunakan prinsip-prinsip representasi sumber daya melalui URL.
Tugas pemrograman 3 (rpc,soap,rest) 1100631003 muhammad arif prayugoArif Prayugo
1. Dokumen tersebut membahas tentang RPC, SOAP, dan REST sebagai teknologi untuk memanggil prosedur jarak jauh dan berbagi sumber daya melalui jaringan.
Dokumen tersebut membahas tentang Remote Procedure Calls (RPC), SOAP, dan REST. RPC adalah protokol yang memungkinkan program berjalan di komputer jarak jauh tanpa adanya eksekusi kode jarak jauh secara langsung. SOAP adalah standar untuk pertukaran informasi terstruktur antar aplikasi, sedangkan REST berbasis sumber daya dan menggunakan perintah HTTP.
RPC memungkinkan akses prosedur jarak jauh dengan server menyediakan layanan prosedur remote dan client menghubungi server melalui socket. RPC menggunakan paradigma pemrograman prosedural dan mudah digunakan tetapi kurang fleksibel terhadap perubahan.
Protokol mendefinisikan aturan dan format untuk mengirim dan menerima pesan antar komputer dalam jaringan. Fungsi protokol meliputi fragmentasi dan rekonsiliasi data, pengemasan informasi, kontrol koneksi, kontrol kesalahan, dan layanan transmisi. Remote Procedure Call memungkinkan akses prosedur pada komputer lain melalui server yang menyediakan layanan prosedur remote. Middleware seperti CORBA dan RMI memungkinkan komunikasi antar objek yang terdistribusi me
TFTP adalah protokol transfer file sederhana yang menggunakan UDP sebagai transportnya. TFTP dikembangkan untuk perangkat yang memiliki sumber daya terbatas seperti diskless workstation. TFTP hanya mendukung operasi read dan write file secara sederhana tanpa fitur kompleks seperti autentikasi atau representasi data yang dimiliki FTP.
Port TCP dan UDP digunakan untuk mengidentifikasi proses dan layanan yang terkoneksi di jaringan TCP/IP. Port dibagi menjadi tiga jenis yaitu well-known port (0-1023), registered port (1024-49151), dan dynamically assigned port (1024-65536) yang dapat dialokasi sesuai kebutuhan. Well-known port merepresentasikan layanan standar yang ditetapkan IANA.
Dokumen tersebut memberikan penjelasan tentang pemindaian jaringan menggunakan Nmap untuk mendeteksi layanan apa saja yang dijalankan pada host sasaran. Nmap dapat mendeteksi nomor port, nama layanan, status port, sistem operasi, dan informasi lainnya. Dokumen juga menjelaskan beberapa teknik pemindaian port menggunakan Nmap seperti connect scan, SYN scan, FIN scan, dan lainnya.
Port dalam protokol TCP/IP memungkinkan komputer mendukung beberapa sesi koneksi dan mengidentifikasi aplikasi dan layanan dalam jaringan. Port dibagi menjadi well-known (0-1023), registered (1024-49151) dan dynamically assigned (1024-65536)
Transport layer bertugas melakukan komunikasi antara komputer dalam jaringan dengan menggunakan dua protokol, yaitu TCP dan UDP. TCP bersifat connection-oriented dan menjamin sampainya data sedangkan UDP bersifat connectionless tanpa pengakuan penerimaan data. Kedua protokol menggunakan port dan socket untuk mengidentifikasi aplikasi sumber dan tujuan komunikasi.
Bab 7 membahas protokol transport layer TCP dan UDP. TCP menyediakan koneksi berorientasi, manajemen aliran, dan pemulihan kesalahan sedangkan UDP bersifat tidak terkoneksi dan tidak handal. Port dan socket digunakan untuk mengidentifikasi proses pada host. TCP digunakan oleh aplikasi seperti telnet, FTP, SMTP, dan HTTP.
1. Telnet adalah protokol jaringan yang memungkinkan akses jarak jauh ke server melalui koneksi teks tanpa enkripsi, sehingga sudah jarang digunakan karena rawan disadap. 2. SSH digunakan sebagai pengganti Telnet karena mengenkripsi seluruh komunikasi untuk keamanan yang lebih baik. 3. Perbedaan utama Telnet dan SSH adalah Telnet hanya mengenkripsi sebagian isi payload sedangkan SSH mengenkripsi seluruhny
Tugas 1 analisis paket network protocol dengan menggunakan tools wiresharkEka Putuasduki
Dokumen tersebut membahas analisis paket jaringan menggunakan Wireshark untuk melihat protokol yang terlibat dalam komunikasi data antar komputer. Wireshark digunakan untuk menangkap paket-paket protokol yang ditransmisikan ketika mengakses website, sehingga setiap protokol dan aktivitas jaringan dapat diamati dan dianalisis.
Dokumen tersebut membahas tentang tiga protokol komunikasi antar sistem yaitu RPC (Remote Procedure Call), SOAP (Simple Object Access Protocol), dan REST (Representational State Transfer). RPC memungkinkan pengaksesan prosedur yang berada di komputer lain, SOAP menggunakan protokol HTTP untuk pertukaran objek, sedangkan REST menggunakan prinsip-prinsip representasi sumber daya melalui URL.
Tugas pemrograman 3 (rpc,soap,rest) 1100631003 muhammad arif prayugoArif Prayugo
1. Dokumen tersebut membahas tentang RPC, SOAP, dan REST sebagai teknologi untuk memanggil prosedur jarak jauh dan berbagi sumber daya melalui jaringan.
Dokumen tersebut membahas tentang Remote Procedure Calls (RPC), SOAP, dan REST. RPC adalah protokol yang memungkinkan program berjalan di komputer jarak jauh tanpa adanya eksekusi kode jarak jauh secara langsung. SOAP adalah standar untuk pertukaran informasi terstruktur antar aplikasi, sedangkan REST berbasis sumber daya dan menggunakan perintah HTTP.
RPC memungkinkan akses prosedur jarak jauh dengan server menyediakan layanan prosedur remote dan client menghubungi server melalui socket. RPC menggunakan paradigma pemrograman prosedural dan mudah digunakan tetapi kurang fleksibel terhadap perubahan.
Protokol mendefinisikan aturan dan format untuk mengirim dan menerima pesan antar komputer dalam jaringan. Fungsi protokol meliputi fragmentasi dan rekonsiliasi data, pengemasan informasi, kontrol koneksi, kontrol kesalahan, dan layanan transmisi. Remote Procedure Call memungkinkan akses prosedur pada komputer lain melalui server yang menyediakan layanan prosedur remote. Middleware seperti CORBA dan RMI memungkinkan komunikasi antar objek yang terdistribusi me
Ubuntu Server 11.10 memiliki berbagai fitur untuk menjalankan layanan jaringan komputer seperti web server, database, file sharing, virtualisasi, dan lainnya. Dokumen ini menjelaskan konfigurasi dasar seperti DHCP, DNS, firewall, serta aplikasi-aplikasi pendukung untuk setiap layanan termasuk Apache, MySQL, Samba, OpenVPN dan lainnya.
Dokumen tersebut membahas protokol-protokol jaringan komputer yang penting beserta fungsi dan standarisasi masing-masing protokol. Protokol-protokol yang dijelaskan antara lain TCP, UDP, ARP, RARP, ICMP, dan NetBIOS beserta fungsi utama masing-masing protokol. Standarisasi protokol diperlukan untuk memfasilitasi komunikasi antar perangkat dan menjamin kompatibilitas.
Ringkasan dokumen tersebut adalah:
1. Dokumen tersebut membahas konsep internetworking dan model arsitektural serta protokol PPP yang digunakan untuk menghubungkan jaringan.
Dokumen tersebut membahas tentang 7 layer OSI dan protokol-protokol yang terkait. Dokumen tersebut juga menjelaskan bagaimana protokol-protokol pada layer OSI tertentu dapat diamati menggunakan Wireshark, seperti TCP, ARP, dan UDP.
Praktikum ini bertujuan untuk membantu peserta memahami dan menyelesaikan masalah jaringan dengan menggunakan berbagai perintah dan tools troubleshooting jaringan pada sistem operasi Windows dan Linux. Praktikan akan belajar menggunakan perintah seperti ipconfig, ping, tracert, pathping untuk Windows dan ifconfig, ping, traceroute, mtr untuk Linux untuk menganalisis dan menyelesaikan masalah konektivitas dan performa jaringan.
Model referensi jaringan terbuka OSI mendefinisikan tujuh lapis model arsitektur jaringan untuk menunjang interoperabilitas antar pemasok. Lapisan-lapisan tersebut meliputi lapisan aplikasi, presentasi, sesi, transportasi, jaringan, data link, dan fisik.
Dokumen tersebut membahas protokol-protokol sistem keamanan jaringan komputer seperti tunneling, PPTP, L2TP, RADIUS, EAP, IPSec, PAP, CHAP, dan MS-CHAP."
Dokumen tersebut memberikan penjelasan tentang RPC (Remote Procedure Call), SOAP (Simple Object Access Protocol), dan REST (REpresentational State Transfer). RPC memungkinkan mengakses prosedur pada komputer lain, SOAP menggunakan protokol HTTP untuk pertukaran informasi secara terdistribusi, sedangkan REST menggambarkan prinsip-prinsip mengakses resource secara jaringan.
1. Tugas Pemrograman III
Essay Mengenai RPC (Remote Procedur Call), SOAP (Simple Object
Access Protocol), Dan REST (Representational State Transfer)
Oleh :
SITI ARBA’IYAH
1100631034
JURUSAN MANAJEMEN INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH JEMBER
2013
2. 1. Remote Procedure Call (RPC)
Definisi RPC
adalah suatu protokol yang menyediakan suatu mekanisme komuikasi antar proses
yang mengijinkan suatu program untuk berjalan pada suatu komputer tanpa terasa
adanya eksekusi kode sistem yang jauh (remote system).
- RPC digunakan untk membangun aplikasi klien server yang terdistribusi.
- Didasarkan pada memperluas konsep konvensional dari suatu prosedur dimana
nantinya mempunyai alamat sama dengan lokasi prosedur dipanggil.
- RPC mengasumsi keberadaan TCP atau UDP untuk membawa pesan data dalam
komniasi suatu program.
- Protokol RPC dibangun diatas protokol eXternal Data Representasi (XDR) yang
merupakan sandar representasi data dalam komunikasi remote.
- Protokol RPC mengijinkan pengguna untuk bekerja dengan remote sebagaimana
bekerja dengan prosedur lokal.
Protokol Message RPC
•Didefinisikan dengan menggunakan deskripsi data XDR yang meliputi struktur,
enumerasi, dan union.
•Membutuhkan faktor-faktor pendukung :
1. Spesifikasi yang unik untuk tiap procedure call
2. Respon message yang sesuai untuk tiap message yang diminta.
3. Otentifikasi klien untuk tiap layanan
3. Struktur Protokol Message RPC
a. Call Message
• Dilakukan oleh klien, dimana meminta server untuk mengeksekusi suatu prosedur.
• Terdapat nilai-nilai unsigned integer yangdigunakan untuk mengidentifikasi prosedur
remote, yang diminta:
1. Nomor Program
2. Nomor Versi dari Program
3. Nomor Prosedur
b. Reply Message
• Dikirimkan oleh server jaringan, bervariasi tergantung apakah call message yang
diminta klien diterima atau ditolak
•Mengandung informasi:
1. RPM mengeksekusi call message dengan sukses
2. Implementasi remote tidak sesuai dengan protokol yang digunakan (versi yang
lebih tinggi atau lebih
rendah ditolak)
3. Program remote tidak tersedia pada sistem remote
4. Program remote tidak mendukung versi yang diminta klien
5. Nomor prosedur yang diminta tidak ada
Fitur dalam RPC
1. Batching Calls
Mengijinkan klien untuk mengirim message calls ke server dalam jumlah besar
secara berurutan.
2. Broadcasting Calls
Menijinkan klien untuk mengirimkan paket data ke jaringan dan menunggu balasan
dari network.
3. Callback Procedures
Mengijinkan server untuk bertindak sebagai klien dan melakukan PRC callback ke
proses yang dijalankan klien.
4. Select Subrutin
4. Memeriksa deskripsi suatu file dan messages dalam antrian untuk melihat apakah
siap dibaca atau ditulis, atau ditahan. (mengijinkan server untuk menginterupsi suatu
aktivitas)
Otentifikasi RPC
• Otentifikasi adalah proses yang digunakan untuk mengidentifikasi server dan klien
pada RPC.
• Bagian-bagian otentifikasi RPC, yaitu :
1.Protokol Otentifikasi RPC
2.Otentifikasi NULL
Digunakan pada sistem dimana pemanggil RPC tidak mengetahui identitasnya
sendiri dan server tidak membutuhkan identitas pemanggil
3.Otentifikasi UNIX
Digunakan pada prosedur remote dalam sistem UNIX
4.Otentifikasi Data Encryption Standard
Membutuhkan keyserv daemon yang harus berjalan baik di sisi server maupun
klien.
5. Protokol Otentifikasi DES
Meliputi protokol penanganan DES pada proses otentifikasi RPC.
6. Enkripsi Diffie-Hellman
Digunakan pada pembuatan kunci publik pada otentifikasi DES dengan 192-bit
kunci.
• RPC tidak berhubungan dengan kontrol akses terhadap layanan individual yang
diberikan.
• Subsistem otentifikasi pada paket RPC bersifat open-ended, yaitu beberapa
otentifikasi dapatdiasosiasikan pada RPC klien
5. Bahasa RPC
• Merupakan bahasa yang dikembangkan dari bahasa XDR dengan penambahan
program definisi.
• Implementasi layanan protokol dan rutin menggunakan command rpcgen, yang
bekorespondensi denga bahasa C.
Definisi dari bahasa RPC, yaitu :
1. Definition
File dengan bahasa RPC memiliki beberapa definisi, diantaranya adalah : enum,
struct, union, typedef, const, dan program.
2. Structure
Struktur pada bahasa RPC dideklarasikan seperti pada pendeklarasian struktur
dalam bahasa C
3. Union
Union pada bahasa RPC berbeda dengan bahasa C. Kemiripan lebih ditunjukkan
dengan variasi pada bahasa Pascal
4. Enumeration
Enumerasi pada bahasa ini memiliki syntax yang sama dengan bahasa C.
5. TypeDef
Tipe Definisi ( Typedef ) pada bahasa ini memiliki syntax yang sama dengan
typedef pada bahasa C.
6. Constant
Constant pada bahasa ini dapat digunakan jika variabel integer konstant dibutuhkan.
7. Programs
Program RPC dideklarasikan dengan syntax berikut secara berurutan :
programdefiniton, version-list, version, procedure-list, procedure.
8. Declarations
Dalam bahasa ini, terdapat empat jenis tipe deklarasi yaitu : simple
declarations, fixed length array declarations, variable- length declaration, dan pointer
declaration.
6. Lapisan RPC
1. Lapisan Tertinggi
• Merupakan lapisan yang bersentuhan langsung dengan sistem operasi, mesin, dan
jaringan tempat RPC berjalan.
• Jenis-jenis servis yang digunakan pada layer ini:
Rutin
Description
1. rnusers
mengembalikan jumlah user pada sistem remote
2. rusers
mengembalikan informasi mengenai user tertentu
3. hevedisk
memeriksa keberadaan disk pada mesin remote
4. rstats
melihat kinerja dari kernel remote
5. rwall
menulis untuk menentukan mesin remote tertentu
6. yppasswd
mengupdate password dari user dalam yellow pages
2. Lapisan Menengah
• Merupakan implementasi dari RPC sesungguhnya.
• Layer ini merupakan layer yang digunakan untuk semua program RPC
• Pada layer ini terdapat rutin-rutin mengenai "registerrpc()", "callrpc", dan scv run.
- ”registerrpc() digunakan untuk memperoleh nomor unik dari tiap prosedur
identifikasi dalam tiap sistem.
- ”callrpc()” digunakan untuk mengeksekusi prosedur remote
3. Lapisan Terendah
• Merupakan lapisan yang mengatur tentang socket dan sistem call.
• Lapisan ini tidak memberikan data dan servis secara detail untuk dapat digunakan.
• Umumnya program yang dibuat untuk lapisan ini merupakan program yang paling
efisien.
Model dan Cara Kerja RPC
7. Model dan Cara Kerja RPC 2
Implementasi Eksploitasi RPC
• Digunakan beberapa tools untuk melakukan eksploitasi pada RPC.
• Pada contoh kasus ini, implementasi dilakukan pada LAN dengan host yang
menggunakan SO Microsoft Windows XP.
• Tahapan eksekusi Eksploitasi :
1.Deteksi sistem yang memiliki kelemahan
2.Penyerangan terhadap sistem tersebut
3.Eksekusi kode pada sistem yang telah ter-remote
A. Deteksi Sistem
• Tools yang digunakan pada tahap ini adalah RPCScan v.2.03
8. • Software ini dapat mendetaksi sistem operasi yang memiliki kelemahan yaitu pada
layanan DCOM (Distributed Component Object Model)
• Sistem yang masih mengaktifkan layanan DCOM akan diberi status ”Vulnerable”
dan sebaliknya akan diberi status ”DCOM Disabled”
• Contoh sistem yang memiliki kelemahan :
B. Eksploitasi Protokol RPC menggunakan Program
• Pada tahap ini akan dilakukan eksploitasi protokol RPC, agar terjadi kekeliruan
penanganan message dari penyerang (host1) ke sistem yang diserang (host2) sehingga
host1 dapat melakukan eksekusi kode pada host2.
• Tools yang digunakan bernama “Kaht” .Program ini akan mengeksploitasi port 135
dari sistem yang terserang.
•Contoh penyerangan :
9. • Gambar diatas menyatakan bahwa host1( IP 192.168.0.87) telah berhasil masuk
kedalam sistem remote pada host2 (IP 192.168.0.13). Keberhasilan eksploitasi ini juga
dapat dilihat pada kondisi port-port yang terhubung antara host 21 dan host 2.
• Sebelum tereksploitasi, tidak ada port TCP pada host1 yang terhubung dengan
saipapun. Setelah ekploitasi pada host 2 berhasil dilakukan, maka terlihat bahwa pada
port 135 terjadi koneksi / koneksi sedang berjalan dan tersambung ( Figure 3.3).
Dengan demikian, maka pengeksekusian kode pada host2 oleh host1 dapat dilakukan.
• Sampai tahap ini, host1 hanya merupakan user dengan hak biasa saja.
• Berikutnya adalah implementasi pengeksekusian kode misalnya membuat account
user baru dengan hak administrator.
- Sebelum dan Sesudah Eksploitasi :
C. Eksekusi Kode
• Tahap ini merupakan tahap eksekusi kode yang diinginkan. Pada tahap ini host1
dapat melakukan apa saja. Pada contoh kasus ini akan dicoba untuk membuat sebuah
account baru dengan hak seorang admin.
• Setelah masuk pada sistem host2, maka gunakan perintah berikut untuk
mengeksekusi pembuatan user baru : net user tom2 /add.
• Kemudian hak user ini diubah menjadi hak Administrator : net localgroup
Administrators tom2 /add
10. • Dengan demikian pada host2 akan didapatkan satu user baru bernama "tom2"
dengan hak seorang administrator.
Pencegahan Eksploitasi RPC
• Beberapa cara pencegahannya:
1. Memblokir port 135, 137, 138 dan 445 pada UDP dan port 135, 149, 445, dan 593
pada TCP melalui Firewall. Disfungsikan COM Internet Services ( CIS ) dan
RPC melalui HTTP yang menggunakan port 80 dan 443 terutama pada jaringan
remote yang menggunakan VPN ( Virtual Private Network ) atau sejenisnya.
2. Gunakan personal Firewall seperti Internet Connection Firewall.
3. Blokir semua port sering diekploitasi dengan menggunakan filter IPSEC.
4. Disfungsikan fitur DCOM pada setiap komputer atau server. Disable DCOM on all
affected machines
5. Khusus Sistem operasi buatan Microsoft, selalu update security patch untuk
meningkatkan keamanan sistem operasi tersebut.
11. Kesimpulan
Saat ini begitu tinggi nilai informasi sehingga banyak pihak yang merasa
membutuhkan informasi yang belum tentu dan selayaknya dimiliki.
Dianalogikan dengan sistem keamanan pada protokol RPC, dimana
protokol ini awalnnya digunakan untuk mempermudah adanya
komunikasi antar klien server untuk aplikasi yang terdistribusi.
Perkembangan berikutnya menunjukkan bahwa fungsi asli protokol ini
digunakan pihak tidak bertanggung jawab untuk memperoleh informasi
yang bukan miliknya.
Simpulan terakhir adalah sesungguhnya tidak ada sistem yang seratus
persen aman dari kebocoran dan kelemahan.
Sebagai administrator sudah seharusnya untuk mengambil tindakan
preventif agar sistem yang dijaga tetap stabil dan terhindar dari
kelemahan yang bisa dimanfaatkan orang lain.
Dalam ilmu komputer, panggilan prosedur jauh (RPC) adalah proses antarkomunikasi yang memungkinkan program komputer untuk menyebabkan
subroutine atau prosedur untuk mengeksekusi dalam ruang alamat lain (biasanya
pada komputer lain pada jaringan bersama) tanpa programmer secara eksplisit
coding rincian untuk interaksi terpencil ini. Artinya, programmer menulis pada
dasarnya kode yang sama apakah subrutin adalah lokal ke masing program, atau
remote. Ketika perangkat lunak tersebut menggunakan prinsip object-oriented,
RPC disebut remote doa atau pemanggilan metode remote.
Banyak teknologi yang berbeda (sering tidak sesuai) telah digunakan untuk
mengimplementasikan konsep tersebut.
15. 1. SOAP (Simple Object Access Protocol)
SOAP ( Simple Object Access Protocol ) adalah cara untuk sebuah
program berjalan di satu jenis sistem operasi ( seperti Windows 2000 ) untuk
berkomunikasi dengan progam yang sama atau jenis lain dari sistem operasi ( seperti
Linux ) dengan menggunakan Dunia luas Web Hypertext transfer Protocol ( HTTP )
dan yang Extensible Markup Language ( XML ) sebagai mekanisme untuk pertukaran
informasi . Karena protokol Web yang terpasang dan tersedia untuk digunakan oleh
semua platform sistem operasi utama , HTTP dan XML memberikan solusi sudah di tangan untuk masalah bagaimana program berjalan di bawah sistem operasi yang
berbeda dalam jaringan dapat berkomunikasi satu sama lain . SOAP menentukan
persis bagaimana untuk mengkodekan header HTTP dan file XML sehingga program
dalam satu komputer dapat memanggil program di komputer lain dan
menyebarkannya informasi. Hal ini juga menentukan bagaimana disebut Program
dapat kembali tanggapan.SOAP dikembangkan oleh Microsoft , DevelopMentor , dan
Userland Software dan telah diusulkan sebagai standar interface ke Internet
Engineering Task Force ( IETF ) . Hal ini agak mirip dengan Internet Inter - ORB
Protocol ( IIOP ) , sebuah protokol yang merupakan bagian dari Obyek Umum
Permintaan Broker Architecture ( CORBA ) . Sun Microsystems 'Remote Method
Invocation ( RMI ) adalah klien / server yang sama Puskesmas meningkatkan protokol
antara program yang ditulis di Jawa .Sebuah keuntungan dari SOAP adalah bahwa
program panggilan jauh lebih mungkin untuk mendapatkan melalui server firewall
yang menyaring permintaan selain untuk aplikasi diketahui ( melalui mekanisme port
yang ditunjuk ) . Karena permintaan HTTP biasanya diperbolehkan melalui firewall ,
program menggunakan SOAP untuk berkomunikasi dapat yakin bahwa mereka dapat
berkomunikasi dengan program mana saja .
16. 2. REST (REpresentational State Transfer)
REST sering digunakan dalam aplikasi mobile , situs jejaring sosial, alat
mashup dan proses bisnis otomatis . Gaya SISA menekankan bahwa interaksi antara
klien dan layanan ditingkatkan dengan memiliki sejumlah operasi ( verba ) .
Fleksibilitas disediakan sumber menugaskan ( nomina ) sendiri indikator sumber daya
universal yang unik mereka ( URI ) oleh . Karena setiap kata kerja memiliki arti
khusus ( GET , POST , PUT dan DELETE ) , SISA menghindari ambiguitas .
Seperti dijelaskan dalam disertasi oleh Roy Fielding , SISA adalah " gaya arsitektur "
yang pada dasarnya memanfaatkan teknologi yang ada dan protokol Web, termasuk
HTTP ( Hypertext Transfer Protocol ) dan XML . REST sederhana untuk digunakan
daripada SOAP terkenal ( Simple Object Access Protocol ) pendekatan , yang
mengharuskan menulis atau menggunakan server program yang disediakan ( untuk
melayani data) dan sebuah program klien ( untuk meminta data ) .
Contoh source code dari SOAP sebagai berikut :
17.
18. REST (Representational State Transfer)
REST sering digunakan dalam aplikasi mobile , situs jejaring sosial,
alat mashup dan proses bisnis otomatis . Gaya SISA menekankan bahwa interaksi
antara klien dan layanan ditingkatkan dengan memiliki sejumlah operasi ( verba ) .
Fleksibilitas disediakan sumber menugaskan ( nomina ) sendiri indikator sumber daya
universal yang unik mereka ( URI ) oleh . Karena setiap kata kerja memiliki arti
khusus ( GET , POST , PUT dan DELETE ) , SISA menghindari ambiguitas .
Seperti dijelaskan dalam disertasi oleh Roy Fielding , SISA adalah " gaya arsitektur "
yang pada dasarnya memanfaatkan teknologi yang ada dan protokol Web, termasuk
HTTP ( Hypertext Transfer Protocol ) dan XML . REST sederhana untuk digunakan
daripada SOAP terkenal ( Simple Object Access Protocol ) pendekatan , yang
mengharuskan menulis atau menggunakan server program yang disediakan ( untuk
melayani data) dan sebuah program klien ( untuk meminta data ) .
REST adalah salah satu jenis web service yang menerapkan konsep perpindahan antar
state. State disini dapat digambarkan seperti jika browser meminta suatu halaman
web, maka serverakan mengirimkan state halaman web yang sekarang ke browser.
Bernavigasi melalui link-link yang disediakan sama halnya dengan mengganti state
dari halaman web. Begitu pula REST bekerja, dengan bernavigasi melalui link-link
HTTP untuk melakukan aktivitas tertentu, seakan-akan terjadi perpindahan state satu
sama lain. Perintah HTTP yang bisa digunakan adalah fungsi GET, POST, PUT atau
DELETE. Balasan yang dikirimkan adalah dalam bentuk XML sederhana tanpa ada
protokol pemaketan data, sehingga informasi yang diterima lebih mudah dibaca dan
diparsing disisi client.
Dalam pengaplikasiannya, REST lebih banyak digunakan untuk web
serviceyang berorientasi pada resource. Maksud orientasi pada resource adalah
orientasi yang menyediakan resource-resource sebagai layanannya dan bukan
kumpulan-kumpulan dari aktifitas yang mengolah resource itu.Alasan mengapa REST
tidak digunakan dalam skripsi ini karena orientasi pada resourcenya itu,sedangkan
aplikasi event calendar membutuhkan pemanggilan metode yang bisa dikerjakan
19. terhadap kumpulan resource event. Selain itu, karena standarnya yang kurang
sehingga tidak begitu cocok diterapkan dalam aplikasi yang membutuhkan kerjasama
antar aplikasi lain, dimana standar yang baik akan sangat berguna karena berbicara
dalam satu bahasa yang sama. Beberapa contoh web service yang menggunakan
REST adalah: Flickr API(Application ProgramInterface), YouTube API, Amazon API.
Solusi Mengakses REST
Pengembangan Aplikasi MVC dengan REST
Mengacu pada kasus pada bab sebelumnya, maka dengan ini akan diteruskan kasus
pengembangan yaitu menggunakan Person sebagai kasus. Berikut ini adalah
implementasi dari PersonController dan PersonService. Jujur saja, kode dalam subbab
ini adalah modifikasi kecil dari code contoh REST dari Struts2, yang mana kode ini
yang menjadi acuan migrasi dari Cimande 1.x ke 2.x, dari kemampuan MVC biasa
menjadi RESTful MVC.
Yang menarik dari kasus kecil ini adalah untuk mempelajari mekanisme bagaimana
pengembangan REST dilakukan, serta bagaimana merubah sebuah action dengan
result jsp menjadi sebuah json, yang siap digunakan sebagai metadata pengembangan
berbasis service atau peningkatan kemampuan interoperabilitas. Yang mana semua hal
ini akan menjadi sajian utama buku ini.
Sebuah proyek kecil s2-rest-showcase, yang mengimplementasikan sebuah POJO
Person, yang terdiri dari Nama dan Amount, dengan implementasi PersonController
untuk memetakan hasil proses dengan lapisan presentasi (JSP) serta PersonService
yang memiliki beberapa method seperti getAll(), save(), remove(), dan get(). REST
showcase ini kalau ditilik lebih lanjut memiliki beberapa kelemahan, oleh karena itu
kami memodifikasinya dengan membuat CimandeActionMapper dan membuat
implementasi JSON dengan Jackson. Yang mana semaunya akan dibahas dibab ini.
Bab ini akan dijelaskan dimulai dari aplikasi REST berjenis produser, dilanjutkan
dengan implementasi dari REST yang ditelah dikembangkan menggunakan aplikasi
Java sederhana. Semua dengan kasus obyek Person. Implementasi diakhir bab adalah
implementasi REST aplikasi sederhana ini dikembangkan menjadi sebuah sumber data
atau data source alternatif selain Hibernate. Sebuah pendekatan perubahaan data
source dari database menjadi services menggunakan mengutilisasi mekanisme
injection.
Aplikasi produser layanan REST pertama adalah yang merupakan sebuah Array,
dilanjutkan dengan implementasi Cimande dan Yama berbasis REST yang
menggunakan Hibernate sebagai data source.
20. Fitur REST sebenarnya sudah tertuang dalam bab sebelumnya, maklum sejak REST
plugins direlease, aplikasi web dengan Struts2 otomatis menjadi REST, dan kami
mencoba membuat versi SpringMVC dengan kodename Yama, ternyata hasilnya sama
juga. Dengan ini pembuktian bahwa pengembangan aplikasi REST adalah tidak
mengembangkan sistem baru seperti halnya SOA, adalah benar apa adanya. Sehingga
aset yang telah ada, dapat dimigrasi ke RESTfull tanpa perlu investasi tim
pengembang baru. Menarik bukan!.
Struts2 telah memiliki fitur otomatis merubah setiap presentation view bilamana kita
telah menambahkan template, tetap metadata baik JSON ataupun XML, tetap
dihasilkan, hanya dengan menambahkan .json atau .xml dikhir URI. Untuk kasus
Cimande dalam buku ini, karena menggunakan modifikasi dari JSON plugin dari json
ke Jackson, maka extension akhir adalah .jackson, dengan output sama-sama JSON.
Kurang lebih output bilamana kita mengakses result yaitu dengan URL
http://localhost:8080/cimande/person/result adalah sebagai berikut:
HTTP/1.1 200 OK
Date: Mon, 28 Feb 2011 03:37:29 GMT
Content-Length: 641
Content-Type: application/json
Server: Apache-Coyote/1.1
[{address:"",parent:
{address:"",parent:null,id:"402881f32e5b2e01012e5b3314b20002",status:"single",firs
tName:"Frans",lastName:"Thamura",gender:true,birthdate:1296493200000,relation:nu
ll},id:"402881f32e5b2e01012e5b32d42b0001",status:"single",firstName:"Frans",last
Name:"Thamura",gender:true,birthdate:null,relation:null},
{address:"",parent:null,id:"402881f32e5b2e01012e5b3314b20002",status:"single",firs
tName:"Frans",lastName:"Thamura",gender:true,birthdate:1296493200000,relation:nu
ll},
{address:"",parent:null,id:"402881f32e5d5a5d012e5d5af5420001",status:"single",first
Name:"F",lastName:"F",gender:true,birthdate:1296493200000,relation:null}]
Untuk memulai pengembangan REST, mari kita menjalankan aplikasi Struts2 REST
showcase yang disertakan dalam DVD buku ini.
Importlah kedalam Eclipse, dan jalankan. Akan langsung diredirect ke URL
http://localhost:8080/S2ShowCase/persons. Sebuah hasil pencarian dihasilkan.
21. Harap memperhatikan source code yang ada disamping kiri, betul sekali.
PersonController memilki banyak method, dan setiap method terhubung dengan file
JSP yang berada di folder content dalam WebContent.
Setting method didalam PersonController adalah tanpa setting apapun, sehingga
bilamana kita membuat satu method, misalnya makan, maka otomatis dibutuhkan
persons-makan.jsp, sebagai template presentation layernya.
Contoh REST Show case adalah menggunakan Person, metode yang mirip yang
dijelaskan dibab sebelumnya, tetapi showcase ini sangat baik untuk menjadi ajang
pembelajaran, karena hanya menggunakan template dan action, tidak ada persistance,
injection atau sejenisnya. Ini adalah sebuah contoh aplikasi web dengan MVC yang
sederhana.
Untuk memudahkan memahami showcase dapat melihat diagram dibawah ini:
22. Diagram menjelaskan ada Controller, Service dan POJO.
Adapun hubungan antara PersonController, PersonService dan Person adalah sama
dengan kasus bab sebelumnya. Berikut adalah desain UMLnya.
23. UML Person Showcase
Bandingkan dengan mekanisme bab sebelumnya, lebih mudah dan praktis bukan.
Bilamana kita hendak mempoint method ke template yang kita tentukan, seperti
konsep yang dijelaskan pada bab berikutnya. Tunggulah jawabannya, akan dijelaskan
setelah ini.
Implementasi REST
Bab sebelumnya menjelaskan bagaimana sebuah controller, injection dan
mengembangkan aplikasi MVC diatas sebuah integration framework. Pengembangan
aplikasi MVC akan semakin mudah, bilamana integration frameworknya sangat
terpadu dan modular. Contoh pengembangan aplikasi CRUD dengan kasus table
pegawai telah dijelaskan. Proses berikutnya adalah mengembangkannya menjadi
REST.
Bab ini diharapkan ada peningkatan pengembangan yaitu mengimplementasikan
pattern DAO dan juga implementasi Service. Sebuah mekanisme yang memisahkan
hubungan ke model dan membuat sebuah controller bersifat pelayanan.
Untuk memulainya hanya memerlukan mengimport code Cimande2 ke Eclipse WTP,
dan menjalankannya dengan Tomcat (code jalan di Tomcat versi 6 maupun 7). Tetapi
code dalam buku ini menggunakan Tomcat 7.
Bilamana telah berjalan sebuah form new dengan URI /person/new akan dijalankan
oleh Eclipse, dan sebuah form isian kosong akan terbentuk.
24. Harap diperhatikan, saat menjalanknyannya setuplah database dengan benar. Setting
database dapat dengan membuka hibernate.cfg.xml.
Cobalah melakukan pengisian beberapa kali, dan jalankan URL berikut
http://localhost:8080/Cimande2/person. Sebuah search result akan terbentuk.
Yang ajaib dari proyek Cimande2 ini adalah, kita tidak perlu membuat database, table
atau fieldnya, hanya dengan merubah setting hibernate.cfg.xml, dan secara otomatis
25. saat dijalankan table dibuat. Lebih hebat lagi bilamana, kita merubah entity yang ada,
dan secara otomatis skema table dirubah mengacu pada table yang baru. Upgrade
otomatis, hebat sekali bukan.
Coba click “Edit” dan akan muncul sebuah form edit dengan URI /person/{id}, id
yang dimaksud adalah id dari field, silahkan masuk ke database, dan buka table nya
dan cari idnya.
Harap diperhatikan, id tidak auto increment, dan digenerate oleh sistem, dalam kasus
ini oleh Hibrnate, informasi lebih lanjut mengenai generate id dapat melihat
DefaultPersistance.
Yang menarik dari kode yang disertakan dibab sebelumnya dengan bab ini adalah
implementasi Controller. Berikut adalah PersonController, dan setiap method yang
dibuat mewakili satu action.
Harap memperhatikan annonation yang ada, yaitu @Result, terdapat beberapa
mekanisme implementasi yaitu velocity dan redirect, yang artinya action yang
dijalankan menggunakan template engine velocity dan yang tidak ada presentasi result
melakukan redirect ke action lainnya..
Menampilkan metadata JSON atau XML
Cimande
26. Yama
Mengkonsumsi layanan berbasis REST
Subbab ini akan mendalami bagaimana mengkonsumsi layanan yang dihasilkan dari
aplikasi yang telah dikembangkan. Untuk mengimplementasikannya, tetap digunakan
pendekatan CRUD, sehingga mekanismenya dapat digunakan menjadi aplikasi lain.
Metode yang akan diterangkan akan terus berkelanjutan, dibab berikutnya akan
digunakan dalam implementasi dalam lingkungan Android, sedangkan diakhir bab
akan digunakan untuk menciptakan composite dashboard dengan Liferay.
Impelementasi yang tidak dijelaskan dalam bab ini adalah mengkonsumsinya
menggunakan Javascript, baik itu menggunakan ExtJS ataupun JQuery.
Secara konsep, mengkonsumsi REST adalah mirip dengan mekanisme menggunakan
database sebagai sumber data, hanya jenisnya saja yang berubah dari database menjadi
metadata baik itu XML atau JSON.
JSON digunakan karena implementasinya dapat langsung didalam browser, dan
dikarenakan harus melakukan konversi XML ke JSON (Array Javascript), dan
prosesnya membutuhkan resource, sehingga JSON diproses diserver. Implementasi ini
malah menjadi kebablasan, sehingga aplikasi yang non browser juga ikut-ikutan
mengimplementasikannya. Dan salah satu implementasinya yang kebablasan ini
adalah buku ini, dimulai dari bab ini.
Implementasi dari aplikasi yang telah kita kembangkan, bilamana telah menjadi
RESTful, adalah terdiri dari dua tipe, yaitu layanan yang public tanpa keamanan, dan
layanan yang membutuhkan keamanan.
Layanan yang public yang umum adalah RSS dari blog, sedangkan layanan yang
membutuhkan keamanan, digunakan umumnya untuk melindungi data, atau
pemisahan konten sesuai dengan jenjang. Impelementasi data yang dengan keamanan
yang sangat mudah dipahami adalah Flickr dengan Web APInya atau implementasi
aplikasi Facebook.
27. Izin Mengakses REST pada Facebook yang menggunakan kunci keamanan
Mengkonsumsi REST publik
Dalam implementasi konsumsi layanan REST publik, sebenarnya kita hanya
membutuhkan URI dari HTTP, dan kemudian hanya perlu mengimplementasikannya,
mau GET atau POST. POST sebaiknya digabungkan dengan security lainnya,
bilamana tidak, dijamin spammer akan menyerang secara dahsyat.
Sub area bab ini dijelaskan mengenai pengembangan aplikasi yang mengkonsumsi
layanan REST berjenis JSON, adalah untuk pemahaman semata. Sebaiknya keamanan
diimplementasikan. Wong dengan keamanan berlapis saja, bisa dijebol.
Diagram dibawah ini menjelaskan bagaimana melakukan pengkonsumsian dengan
URI http://localhost:8080/person, dimana dalam implementasinya adalah
http://localhost:8080/cimande/person, bilamana menggunakan Cimande, dan
http://localhost:8080/yama/person, bilamana menggunakan Yama.
28. Mekanisme pengkonsumsian layanan REST
Berikut adalah sumber kode dari HTTPGetPerson, yang mengkonsumsi layanan
REST, tetapi data yang dikembalikan hanya 1 data, data tersebut akan dikonversi
menjadi obyek Person. Lebih jelasnya silahkan buka file HTTPGetPerson
package org.blueoxygen.cimande.httpclient;
public class HTTPGetPerson {
public static void main(String[] args) {
String scheme = "http";
String host = "localhost";
int port = 8080;
String contextPath = "Cimande";
ObjectMapper mapper = new ObjectMapper();
try {
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
String sampleId = "ff8081812e7afe23012e7affa8310003";
URI uri = URIUtils.createURI(scheme, host, 8080, contextPath
+ "/person/" + sampleId + "/edit.jackson", null,
null);
HttpUriRequest request = new HttpGet(uri);
response = client.execute(request);
// return json from URL become String theJSON
String theJSON = EntityUtils.toString(response.getEntity());
System.out.println("Return : " + theJSON);
Person person = mapper.readValue(theJSON, Person.class);
System.out.println("First Name : " + person.getFirstName());
System.out.println("Last Name : " + person.getLastName());
System.out.println("Parent : "
+ (person.getParent() == null ? "" :
person.getParent()
29. .getFirstName()
+""
+
person.getParent().getLastName()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Yang patut diperhatikan dari kode diatas adalah URI, sampleId, dan
mapper.readValue(). Dimana URI adalah sumber datanya, sedangkan sampleId adalah
ID atau primary key dari data yang hendak kita tampilkan, sedangkan
mapper.readValue() digunakan untuk mengkonversi JSON yang didapat dari server
menjadi Person.class.
Berikut ini adalah bilamana hendak melakukan pengambilan data, tetapi data yang
dikembalikan lebih dari satu data, dan bilamana dikonversi menjadi sebuah koleksi
data, yang terdiri dari banyak obyek Person.
Kata kunci dari merubah JSON yang lebih dari satu data, menjadi sebuah koleksi
adalah sebagai berikut:
public List<Person> getPersonsJackson(String json)
throws JsonParseException, JsonMappingException,
IOException {
TypeReference<ArrayList<Person>> typeReference =
new TypeReference<ArrayList<Person>>() {
};
List<Person> persons = mapper.readValue(json, typeReference);
return persons;
}
TypeReference ini akan merubah JSON yang masuk menjadi ArrayList, yang mana
persons yang direturn adalah List.
Metod getPersonsJackson() dikombinasikan dengan hasil dari HTTPreqeust, menjadi
List dengan value berjenis obyek Person.
Berikut adalah implementasi dari metho getPersonsJackson() menjadi JSON.
HTTPGetPersons person = new HTTPGetPersons();
HttpClient client = new DefaultHttpClient();
30. HttpResponse response = null;
URI uri = URIUtils.createURI(scheme, host, 8080, contextPath
+ "/person/result.jackson", null, null);
HttpUriRequest request = new HttpGet(uri);
response = client.execute(request);
// return json from URL become String theJSON
String theJSON = EntityUtils.toString(response.getEntity());
System.out.println("POST " + uri);
System.out.println("Return : " + theJSON);
System.out.println();
String status = "";
for (Header header : response.getAllHeaders()) {
status = status + header.getValue() + "n";
}
System.out.println("------ Convert via Jackson ------");
for (Person p : person.getPersonsJackson(theJSON)) {
Adapun kode lengkap dari mengambil data menggunakan HttpGet adalah sebagai
berikut:
package org.blueoxygen.cimande.httpclient;
public class HTTPGetPersons {
private ObjectMapper mapper = new ObjectMapper();
private Gson gson = new Gson();
public List<Person> getPersonsJackson(String json)
throws JsonParseException, JsonMappingException,
IOException {
TypeReference<ArrayList<Person>> typeReference =
new TypeReference<ArrayList<Person>>() {
};
List<Person> persons = mapper.readValue(json, typeReference);
return persons;
}
31. public List<Person> getPersonsGson(String json) {
Type listType = new TypeToken<ArrayList<Person>>() {}.getType();
List<Person> persons = gson.fromJson(json, listType);
return persons;
}
public String getSecret(String json) throws JsonParseException,
JsonMappingException, IOException {
return mapper.readValue(json, HashMap.class).get("secret") + "";
}
// this class will consume Person rest URL and return Persons, and interate
// Person..
public static void main(String[] args) {
String scheme = "http";
String host = "localhost";
int port = 8080;
String contextPath = "Cimande";
try {
HTTPGetPersons person = new HTTPGetPersons();
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
URI uri = URIUtils.createURI(scheme, host, 8080, contextPath
+ "/person/result.jackson", null, null);
HttpUriRequest request = new HttpGet(uri);
response = client.execute(request);
// return json from URL become String theJSON
String theJSON = EntityUtils.toString(response.getEntity());
System.out.println("POST " + uri);
System.out.println("Return : " + theJSON);
System.out.println();
String status = "";
for (Header header : response.getAllHeaders()) {
status = status + header.getValue() + "n";
}
32. System.out.println("------ Convert via Jackson ------");
for (Person p : person.getPersonsJackson(theJSON)) {
System.out.println("First Name : " + p.getFirstName());
System.out.println("Last Name : " + p.getLastName());
System.out.println("------------------------------");
}
System.out.println();
System.out.println("------ Convert via Gson ------");
for (Person p : person.getPersonsGson(theJSON)) {
System.out.println("First Name : " + p.getFirstName());
System.out.println("Last Name : " + p.getLastName());
System.out.println("------------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Bagaimana bilamana hendak mengirim data? Tentu saja implementasi POST yang
harus kita gunakan, adapun implementasinya dipecah menjadi 2 area, yaitu
implementasi koleksi untuk masukan atau parameter, dan pengiriman parameter untuk
ekskusi.
Berikut adalah implementasi koleksi masukan atau paramternya;
// Set request parameter
List<NameValuePair> formparams = new
ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("username", "dianw"));
formparams.add(new BasicNameValuePair("password", "dianw"));
formparams.add(new BasicNameValuePair("firstName", "Dian"));
formparams.add(new BasicNameValuePair("lastName", "Aditya"));
formparams.add(new BasicNameValuePair("gender", "true"));
Sedangkan implementasi melakukan pengiriman informasi adalah sebagai berikut:
HttpPost httpPost = new HttpPost(uri);
//httpPost.setHeader("Content-type", "text/html");
33. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams);
httpPost.setEntity(entity);
System.out.println(uri);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(httpPost);
Mengimplementasikan Keamanan dalam pengiriman data REST.
Mekanisme yang telah dijelaskan adalah mengkonsumsi data yang dihasilkan REST
server tanpa keamanan, termasuk juga mengirim atau memasukan data ke dalam
REST server. Mekanisme itu adalah sangat tidak aman dan sangat mudah diserang
spammer, khususnya yang POST.
Untuk mengimplementasikan security, diperlukan seperti layanan tambahan untuk
memproses dan mengola data yang berjenis keamanan, yang notabene umumnya
berhubungan dengan user, password atau sejenisnya.
Berikut adalah UML dari implementasi token interceptor yang bertugas mengfilter
setiap request REST.
Diagram UML Implementasi Keamanan dengan Token
34. Implementasi token keamanan didalam lingkungan REST adalah sangat penting,
sebab jenis transaksi REST adalah state less, yang berarti setiap request dengan
request lainnya tidak saling berhubungan. Berbeda dengan implementasi pada
browser, yang ditahan adalah sessionnya, yang akan jatuh tempo setelah 20 menit
umumnya, dimana saat itu diperlukan login kembali.
Lingkungan REST yang statefull memerlukan identifikasi sendiri untuk membuat
setiap request memiliki keterkaitan.
Implementasi UML diatas adalah sama dan mirip dengan implementasi Person, yang
telah dibahas dibab sebelumnya, dimana ditemukan Controller, Service dan Model.
Yang membedakan adalah implementasinya tidak menjadi View baik itu HTML atau
JSON ataupun XML, melainkan digabungkan kedalam interceptor. Kalau diperhatikan
didalam kode sumber Cimande, ada 2 implementasi interceptor, untuk memproses
.jackson yang merupakan plugin Strut2 dan implementasi token ini.
Banyaknya interceptor adalah tidak dibatasi, dan tentu saja berhubungan langsung
dengan performansi server, karena setiap interceptor membutuhkan resource.
Telah dikembangkan GetToken, sebuah aplikasi sederhana untuk merubah username
dan password, menjadi token yang diambil dari table User (variable secret yang
berjenis String).
Mekanisme pemrosesan username/password menjadi token
URI dari token adalah /login, artinya implementasi dari UserController. Berikut adalah
annonation dari UserController yang melakukan mapping terhadap /login adalah
@Actions( { @Action("/user/login"), @Action("/user/register") }).
Implementasi pembuatan secret key atau token keamanan ini, masih sangat sederhana,
hanya mengimplementasikan UUID.randomUUID().
user.setSecret(UUID.randomUUID().toString());
Sedangkan untuk menggunakannya adalah dengan implementasi seperti ini
URI uri = URIUtils.createURI(scheme, host, port, contextPath
+ "/person/" + sampleId + "/edit.jackson", "key=" + secret, null);
35. Dimana key yang dimasukan akan diproses bukan oleh PersonController, tetapi oleh
ServiceInterceptor.
if (request.getParameter("key") != null) {
User user = service.getBySecret(request.getParameter("key"));
if (user != null) {
return invocation.invoke();
}
}
Key ini adalah pintu untuk memperbolehkan mengambil data Person, dan
PersonController akan diproses.
Berikut adalah diagram untuk menjelaskan proses pengambilan obyek Person yang
lebih dari satu.
Implementasi mengambil data dari server REST dengan mekanisme token
Berikut adalah implementasi dari kode yang telah dijelaskan diawal bab ini tetapi
menggunakan token, untuk lebih lengkapnya silahkan melihat kode sumber bab ini.
GetPersonWithToken:
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
String theJSON = "";
// Get secret key
String secret = GetToken.getSecret("dian", "dian");
String sampleId = "ff8081812e7afe23012e7affa8310003";
URI uri = URIUtils.createURI(scheme, host, port, contextPath
+ "/person/" + sampleId + "/edit.jackson", "key=" + secret,
null);
36. HttpUriRequest request = new HttpGet(uri);
response = client.execute(request);
GetPersonsWithToken:
HTTPGetPersonsWithToken person = new HTTPGetPersonsWithToken();
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
// Get secret key
String secret = GetToken.getSecret("dian", "dian");
URI uri = URIUtils.createURI(scheme, host, 8080, contextPath
+ "/person/result.jackson", "key=" + secret, null);
HttpUriRequest request = new HttpGet(uri);
response = client.execute(request);
// return json from URL become String theJSON
String theJSON = EntityUtils.toString(response.getEntity());
Bekerja dengan JSONFactory
Telah dijelaskan pada sub bab diatas, mengenai bagaimana mengkonsumsi sebuah
layanan berbasis REST dengan output JSON, baik layanan publik tanpa hak akses
ataupun dengan mekanisme token untuk hak akses. Sub bab ini akan membahas
mengenai implementasi menggunakan mekanisme factory, sebuah implementasi yang
umum digunakan pada solusi berbasis container seperti Java.
Kelebihan mekanisme factory adalah thread yang dikelola didalam factory, sering
disebut ObjectFactory. Mekanisme ini adalah dikarenakan mengakses sebuah sumber
data sangat memerlukan resource, dan sebaiknya dilakukan implementasi pooling, hal
yang sama yang kita temukan pada saat kita mengakses database dengan connection
pooling.
Tentu saja dengan mengetahui fitur factory didalam sebuah API, maka kita dapat
mulai menggunakan konsep yang sama untuk semua data source yang kita akan
gunakan. Jadi tidak asal pakai saja.
Untuk sub bab ini kita hanya membahas JSON API dari Jackson
(http://jackson.codehaus.org), tetapi disubbab sebelumnya ada GSON dari Google,
tetapi karena tidak ada fitur JSONFactory, maka kita mengimplementasikan Jackson.
37. JSONFactory dari Jackson ada di org.codehaus.jackson.JsonFactory. Sedangkan
implementasi untuk session factorynya (istilah yang digunakan di Hibernate), adalah
org.codehaus.jackson.JsonGenerator.
Didalam Jackson, terdapat JsonFactory adalah pabrik dari json di Jackson, sedangkan
JsonGenerator untuk menulis Json, JsonParser untuk membaca. Ada satu obyek yaitu
ObjectMapper yang digunakan untuk membinding Json. Sebuah gabungan dari
JsonParser dan JsonGenerator? Nah ObjectMapper ini dapat dikatakan XML
Bindingnya JSON. ObjectMapper ini akan menggunakan JsonParser dan
JsonGenerator dalam membentuk instan JSON.
Mekanisme factory yang telah dijelaskan dan beberapa obyek yang hendak kita
gunakan, akan kita implementasikan didalam ApplicationContext Spring, yang tertulis
seperti ini.
<bean id="jacksonObjectmapper"
class="org.codehaus.jackson.map.ObjectMapper" />
<bean id="jacksonJsonFactory" class="org.codehaus.jackson.JsonFactory">
<constructor-arg index="0" ref="jacksonObjectmapper" />
</bean>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="objectMapper" ref="jacksonObjectmapper" />
</bean>
Konfigurasi <bean> dapat dilihat di file ApplicationContext.xml didalam folder
/src/resource. Yang mana dalam implementasinya akan dideploy di /WEBINF/classes.
Mengimplementasikan JsonFactory adalah dengan menambahkan @Autowired di
class Service, dalam kasus buku ini adalah PersonServiceImpl, sebuah implementasi
dari PersonService.
Berikut adalah settingnya
@Autowired
private JsonFactory jsonFactory;
Implementasi dari JsonFactory adalah dengan membuat view dari /person/{id}, sama
dengan edit yang telah diimplementasikan dibab MVC. Tentu saja model yang dibahas
disini adalah mengkonsumsi JSON.
Untuk menghasilkan JSON, berikut adalah contoh memproses JSON menjadi JSON di
PersonJsonController, sebuah implementasi REST dengan JsonFactory.
38. public String jsonGet() {
try {
HttpServletResponse response =
ServletActionContext.getResponse();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
personService.writePersonAsJson(person.getId(),
response.getWriter());
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
Adapun diagram kerja dituangkan dalam diagram berikut
Implementasi JsonFactory ini bersamaan dengan HibernateFactory, sehingga dapat
dikatakan kode dari sub bab ini adalah implementasi MVC dengan output JSON,
dengan data source dari database dan JSON.