RSS

Make Swagger with XML Config on Spring 3 MVC

Pada tulisan saya sebelumnya mengenai pembuatan Swagger dengan menggunakan javaConfig. Sekarang saya akan mencoba mengutak-atik dengan cara menggunakan XML Config. Untuk pom.xml sama seperti pada tulisan sebelumnya

Bean Servlet Config
Yang membedakan antara Java Config dengan XML Config adalah pada discpatcher servlet ini. Saya akan meletakan semua configurasi ada disini. Berikut settinganya


        
        
        
        
            
        
        
        
            
            
            
            
            
            
        
        
            
            
        

Configurasi diatas memerlukan sedikit manipulasi. Karena setelah saya cermati pada swagger version ini tidaklah support jika kita ingin melakukanya dengan cara XML Config.
  1. context:component-scan
    Component diatas melakukan scanning terhadap component-component atau annotation yang akan dibaca oleh spring. Pada program saya ini hanya pada package com.test.controller dan com.test.model yang memiliki annotation yang harus dibaca oleh Spring Framework. Controller digunakan untuk Business logic dan Model digunakan untuk data entity getter setter.
  2. mvc:annotation-driven
    Jika pada java config sintax ini digunakan untuk @EnableWebMvc. Karena pada program yang saya gunakan adalah REST yang akan melakukan Request dan response berupa json maka saya butuh ini.
  3. mvc:resources mapping
    Resource mapping digunakan untuk meletakan file-file static pada contoh disini digunakan untuk template dari swagger nya. Didalamnya hanya berupa file static seperti html, javascript, images dan css. Bisa didownload disini
  4. Bean id:swaggerConfig
    Karena kita akan melakukan configurasi menggunakan XML Config. Maka kita akan bermain dengan XML Bean. Class com.test.model.Swagger merupakan class yang digunakan untuk melakukan getter dan setter untuk class com.mangofactory.swagger.configuration.SpringSwaggerConfig. Oleh sebab itu kita perlu melakukan depedency injection com.mangofactory.swagger.configuration.SpringSwaggerConfig kedalam class ini.
  5. Bean id:swagConf
    Pada bean ini terdapat class com.mangofactory.swagger.configuration.SpringSwaggerConfig. Digunakan untuk autowired agar swagger kita bisa di configurasi dan class ini merupakan depedency dari com.test.model.swagger.
  6. Bean id:apiinf
    Pada bean ini kita akan melakukan configurasi dari Api info. Untuk contructor argument pertama digunakan untuk Title dari API Swagger, Argument yang kedua untuk description, yang ketiga untuk terms of service URL, yang keempat merupakan contact yang bisa dihubungi, yang kelima merupakan licence dari Applikasi ini, yang terakhir adalah alamat licence URL.
  7. Bean id:customImplementation
    CustomImplementation merupakan main configurasinya. Dengan adanya bean ini kita bisa melakukan configurasi swagger dengan Api Info yang kita inginkan. Inti dari bean ini sebenarnya adalah SwaggerSpringMvcPluggin. Akan tetapi karena class tersebut tidak support untuk XML Configuration oleh sebab itu pada bean ini saya perlu melakukan sedikit tricky dan saya jelaskan dibawah. Pada Constructor yang diinginkan adalah springSwaggerConfig. Kita sudah buat beanya diatas pada com.test.model.swagger. untuk mendapatkan springSwaggerConfig maka kita masukan contructor-arg nya #{SprngSwaggerConfig.getSpringSwaggerConfig()} artinya memanggil model getSpringSwaggerConfig pada class ber id SpringSwaggerConfig. Kemudia kita perlu set apiInfo nya dan kita pun sudah meng-custome nya dengan nama apiinf.


Tricky di Class com.test.configuration.ApiInfo
public class ApiInfo extends SwaggerSpringMvcPlugin {
    public ApiInfo(SpringSwaggerConfig springSwaggerConfig) {
        super(springSwaggerConfig);
    }
    public SwaggerSpringMvcPlugin getApiInfo(){
        return this;
    }
    public void setApiInfo(com.wordnik.swagger.model.ApiInfo api){
        apiInfo(api);
    }
}
Class disana saya melakukan extends terhadap SwaggerSpringMvcPlugin. Saya lakukan ini karena pada class SwaggerSpringMvcPlugin tidak ada getter dan setter untuk ApiInfo. Sehingga akan timbul pesan error jika kita coba jalankan.

Buat Class com.test.model.Swagger
public class Swagger {
    private SpringSwaggerConfig springSwaggerConfig;
    
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig){
        this.springSwaggerConfig=springSwaggerConfig;
    }
    public SpringSwaggerConfig getSpringSwaggerConfig(){
        return this.springSwaggerConfig;
    }
}
Ini digunakan hanya untuk getter dan setter pada springSwaggerConfig yang dibutuhkan oleh framework spring untuk menghandle configurasi dari swagger.

Apache Tomcat Multiple Instance in One Machine Part 2

Lanjutan dari postingan yang pertama, Jika postingan yang pertama merupakan penjelasanya maka sekarang kita melakukan implementasinya.

Re-Structure Folder Apache Tomcat
Tentukan manakah yang akan dijadikan menjadi Tomcat induk atau CATALINA_HOME dan menjadi Tomcat anak atau CATALINA_BASE. Jika sudah, Maka didalam folder CATALINA_BASE make user semua directory tomcat exist begitu juga dengan CATALINA_HOME. Berikut beberapa hal yang perlu diperhatikan saat akan membuatnya
1. Copy Tomcat hasil downloadan menjadi CATALINA_HOME
2. Lakukan hal yang sama kepada CATALINA_BASE, dengan melakukan remove semua isi didalam webapps, logs, temp, lib, dan work.

Konfigurasi instances
Sebelum kita melakukan konfigurasi perlu diketahui juga bahwa jangan sampai apa yang akan kita konfigurasi akan bentrok dengan instances lain. Hal yang diperhatikan adalah
1. Port yang akan digunakan
Apache Tomcat secara default makan dia akan membuat 3 LISTEN Port yaitu, SHUTDOWN, HTTP dan Proxy AJP. Akan tetapi proxy AJP nantinya akan kita remove, Karena kita tidak menggunakanya. Shingga ada 2 port saja yang nantinya harus diperhatikan.
2. Lokasi dari CATALINA_HOME dan CATALINA_BASE
Jika sampai kita salah, Maka kita bisa men screw up applikasi yang kita gunakan.

Pada Windows/Linux
Setting Tomcat as a Master
1. Copy folder tomcat download ke lokasi yang diinginkan
2. Rubah namanya menjadi apache-tomcat-8.0.15-master
3. Remove beberapa folder yang tidak diinginkan seperti (work,webapps,log,temp dan conf) namun sisakan folder bin dan lib beserta isinya. Alasan mengapa kita perlu remove folder tersebut karena folder tersebut hanya akan di gunakan oleh tomcat instances bukan masternya.

Setting Tomcat as a Instance
1. Copy folder tomcat download ke lokasi yang diinginkan
2. Rubah namanya menjadi nama app anda. Misalkan app-sms
3. Remove isi folder bin dan lib. Karena folder tersbut sudah ada di dalam master.
4. Rubah configurasi app anda di dalam folder conf. Kemudian cari file yang namanya server.xml.

  
  
  
  
  
  
    
  
  
    
    
      
        
      
      
        
      
    
  

Rubah lah port yang saya beri tanda higlight diatas. Untuk port shutdown 8006 sedangkan port untuk komunikasi http port 8081 dan untuk redirectport adalah 8444.
5. buath file setenv.bat untuk windows dan setenv.sh untuk linux di dalam folder bin
Untuk di linux
#!/bin/bash
CATALINA_HOME=/opt/apache-tomcat-8.0.15-master
CATALINA_BASE=/opt/app-sms
export CATALINA_HOME CATALINA_BASE
Catalina home adalah untuk master dan catalina_base adalah untuk instance. Setelah itu kita buat script start-app.sh dan stop-app.sh.
Script start-app.sh
#!/bin/bash
. setenv.sh
JAVA_HOME=/usr/bin/java
JAVA_OPTS="-Xmx256m -Xms128m"
export JAVA_HOME JAVA_OPTS
$CATALINA_HOME/bin/catalina.sh start

Script stop-app.sh
#!/bin/bash
. setenv.sh
JAVA_HOME=/usr/bin/java
export JAVA_HOME
$CATALINA_HOME/bin/catalina.sh stop


Untuk di Windows
@echo off
set CATALINA_HOME=/opt/apache-tomcat-8.0.15-master
set CATALINA_BASE=/opt/app-sms
Simpan dengan nama setenv.bat.
@echo off
call setenv.bat
set JAVA_HOME=G:\Java\jdk1.7.0_79
call %CATALINA_HOME%\bin\startup.bat
Kemudian simpan dengan nama start-app.bat
@echo off
call setenv.bat
set JAVA_HOME=G:\Java\jdk1.7.0_79
call %CATALINA_HOME%\bin\shutdown.bat
Simpan dengan nama stop-app.bat.
Jika kita ingin melakukan troubleshoting terhadap script anda maka tinggal ganti kata start pada line "call "%EXECUTABLE%" start %CMD_LINE_ARGS%" menjadi "call "%EXECUTABLE%" run %CMD_LINE_ARGS%" pada file startup.bat yang ada di catalina home. Jika kita tidak menggantinya maka kita tidak akan tau errornya karena pada command prompt dia langsung menghilang tanpa menampilkan errornya apa.

Apache Tomcat Multiple Instance in One Machine Part 1

Pada Tulisan saya ini, Ingin berbagi untuk menjalankan beberapa instance dalam satu machine.

Pertanyaan pertama, Kenapa sih kita harus run multiple instance?
Alasan pertama, Jika applikasi yang kita buat merupakan applikasi yang berbeda dan independence. Contohnya kita memiliki applikasi yang namanya Content Management System dan applikasi yang kedua adalah applikasi sms. Bayangkan jika mereka dalam instance yang sama. Jika ada perubahan applikasi dan perlu untuk di restart. Maka salah satu applikasi yang seharusnya tidak mati, malah ikutan mati. Kalau bahasa mudahnya easy to maintaince.
Alasan yang kedua, Jika kita ingin melakukan management memory pada tiap-tiap applikasi. Jika dalam satu instance kita kurang tau tiap-tiap applikasi memakan berapa banyak memory. Dengan adanya pemisahan instance, kita dapat mengetahui applikasi yang mana yang telah memakan memory yang banyak di server kita. Berikut tampilanya
[takmgr@localhost bin]$ top
top - 16:20:31 up 17:06,  5 users,  load average: 0.20, 0.11, 0.07
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.3 sy,  0.0 ni, 94.5 id,  1.6 wa,  1.0 hi,  1.6 si,  0.0 st
KiB Mem :  1529248 total,    78936 free,   330540 used,  1119772 buff/cache
KiB Swap:  2326524 total,  2325620 free,      904 used.  1164836 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
32146 root      20   0   15720   8508   7500 S  0.3  0.6   0:01.14 sshd
32274 takmgr    20   0  404080 152832   9304 S  0.3 10.0   0:11.94 java
32385 takmgr    20   0  404240 152820   9276 S  0.3 10.0   0:12.50 java
32430 takmgr    20   0    8768   3564   3120 R  0.3  0.2   0:00.06 top
    1 root      20   0    8308   6432   3792 S  0.0  0.4   0:09.61 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:17.93 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S  0.0  0.0   0:13.75 rcu_sched
    8 root      20   0       0      0      0 S  0.0  0.0   0:08.18 rcuos/0
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
   10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0
[takmgr@localhost bin]$ ps aux | grep tomcat
takmgr   32274  2.9  9.9 404080 152832 pts/3   Sl   16:14   0:12 /usr/local/src/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/opt/sendmail-app/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xmx256m -Xms100m -Djava.endorsed.dirs=/opt/apache-tomcat-7.0.65-master/endorsed -classpath /opt/apache-tomcat-7.0.65-master/bin/bootstrap.jar:/opt/sendmail-app/bin/tomcat-juli.jar -Dcatalina.base=/opt/sendmail-app -Dcatalina.home=/opt/apache-tomcat-7.0.65-master -Djava.io.tmpdir=/opt/sendmail-app/temp org.apache.catalina.startup.Bootstrap start
takmgr   32385 17.7  9.9 404240 152820 pts/3   Sl   16:19   0:12 /usr/local/src/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/opt/mail-app/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xmx256m -Xms100m -Djava.endorsed.dirs=/opt/apache-tomcat-7.0.65-master/endorsed -classpath /opt/apache-tomcat-7.0.65-master/bin/bootstrap.jar:/opt/mail-app/bin/tomcat-juli.jar -Dcatalina.base=/opt/mail-app -Dcatalina.home=/opt/apache-tomcat-7.0.65-master -Djava.io.tmpdir=/opt/mail-app/temp org.apache.catalina.startup.Bootstrap start
takmgr   32432  0.0  0.1   6300  2128 pts/3    S+   16:21   0:00 grep --color=auto tomcat
Baris yang dicetak tebal itu merupakan bagian memory.

Sedikit bocoran saja sebenarnya dalam melakukan pemisahan instance ini seperti halnya kita melakukan copy paste apache tomcat menjadi jumlah yang kita ingin tentukan(instance). Jadi sebelum kita melakukan peng-copyan alangkah lebih baiknya kita mengetahui isi dalam folder apache tomcat tersebut
Structure Directory Apache Tomcat
bin: Merupakan directory untuk mengeksekusi perintah start dan stop
conf: Merupakan directory untuk melakukan configurasi pada sisi tomcat instance-nya
webapps: Merupakan directory untuk deploy dan expand applikasi
work: Merupakan directory dari applikasi yang telah dicompile. sehingga kita bisa lihat dalamnya dari applikasi kita
logs: Merupakan kumpulan dari log-log si tomcat
lib: Merupakan directory kumpulan dari library-library yang dibutuhkan oleh tomcat/applikasi kita
temp: Merupakan directory yang digunakan untuk menyimpan data temporary

Check Current State Connection to Our Server Part 2

Jika pada tulisan yang pertama sudah dijelaskan pentingnya open connection dan menjaga system agar connection yang ada adalah benar-benar connection yang terpakai. Bukan connection yang menyampah gara-gara tidak ditutup dsb. Berikut script untuk memonitoringnya secara live pada console kita.
#!/bin/bash
netstat -anp | grep tcp | awk '{print $5" "$6" "$7}'| sort -n | uniq -c
simpan file tersebut dengan nama checkConnection.sh. Pada script yang saya tuliskan diatas saya mencoba untuk melakukan list sapa saja yang terkoneksi ke dalam server dan menghitungnya jika ada yang specific. Langkah selanjutnya running program tersebut dengan perintah
watch -n 1 'bash checkConnection.sh'
watch disitu dengan parameter -n 1 digunakan untuk menjalankan script tersebut setiap 1 detik. Sehingga bisa dibilang kita sudah memonitoring secara RealTime, Berikut penampakanya
Every 1.0s: bash checkConnection.sh

      1 0.0.0.0:* LISTEN 1390/mysqld
      1 0.0.0.0:* LISTEN 2061/cupsd
      1 0.0.0.0:* LISTEN 4006/sshd
      1 0.0.0.0:* LISTEN 705/rpcbind
      1 0.0.0.0:* LISTEN 998/rpc.statd
      1 :::* LISTEN 2061/cupsd
      1 :::* LISTEN 4006/sshd
      1 :::* LISTEN 705/rpcbind
      1 :::* LISTEN 991/httpd
      1 :::* LISTEN 998/rpc.statd
      1 74.125.200.191:443 ESTABLISHED 2376/firefox
      1 74.125.224.47:443 ESTABLISHED 2376/firefox
      1 114.125.1.144:443 ESTABLISHED 2376/firefox
      1 114.125.1.150:443 ESTABLISHED 2376/firefox
      1 127.0.0.1:22 ESTABLISHED 9705/ssh
      1 127.0.0.1:33774 ESTABLISHED 9706/sshd:

Check Current State Connection to Our Server Part 1

Pada tulisan ini saya akan membahas mengenai State connection. Saya punya pengalaman saat teman saya tanya mengenai jumlah user yang dapat mengakses ke server kita. Sebenarnya ada banyak yang mempengaruhi hal tersebut. Salah satunya jumlah open connection yang telah di buka.

State Connection
Sebelum kita bahas lebih lanjut alangkah lebih baiknya perlu untuk mengetahui apa saja state connection yang diketahui oleh Linux dan bagaimana prosesnya
Pada sisi Server ada 5 phase yaitu LISTEN, SYN_RECD, ESTABLISHED, CLOSE_WAIT dan LAST_ACK. Listen berarti service kita telah menyala dan sedang Listen untuk menunggu request masuk. Kemudian Jika ada request masuk pertama-tama adalah menerima SYN paket dari client. Jika server dapat menerima maka server akan meresponse SYN+ACK. Pada kondisi ini server akan mencoba mengirimkan paket berulan-ulang jika Server tidak mendapatkan ACK dari client karena statusnya masih half open connection hal ini dikarenakan feature dari jaringan protocol TCP/IP untuk melakukan retransmission jika sapa tau terjadi kegagalan. Cara mengechek berapa jumlah system kita melakukan re-transmission adalah
cat /proc/sys/net/ipv4/tcp_synack_retries
Defaultnya adalah selama 5 kali dan akan diabaikan dan tidak dilanjutkan jika sudah 5 minutes tidak ada response. Apabila kondisinya Server mendapatkan pesan ACK maka pada phase ini dinamakan SYN_RECD. Kemudian proses komunikasi bisa dilakukan dengan ditandai ESTABLISHED. Secara default ESTABLISHED akan berakhir jika client memutuskan untuk menyelesaikan dengan mengirimkan paket FIN. Akan tetapi jika hal tersebut tidak terjadi maka kita harus menunggu selama 432000 seconds (selama 5 hari). Nilai itu adalah default dari linux, apabila masih tidak ada aktifitas maka firewall kita akan memutuskanya. Untuk melihatnya ada di
cat /proc/sys/net/netfilter/nf_contrack_tcp_timeout_established
Kemudian adalah phase CLOSE_WAIT. Pada phase ini server akan menunggu selama 60 seconds default dari linuxnya
cat /proc/sys/net/netfilter/ip_conntrack_tcp_timeout_time_wait
Jika kita sudah tau ternyata dalam proses komunikasi ada masa tunggunya maka anda bisa bayangkan jika didalam server kita sudah penuh dan tidak dapat membuat connection lagi. Maka server tersebut akan tidak dapat melayani layanan selama dari waktu tunggu tersebut. Mending kalo hanya suruh nunggu 2 menit untuk menuggu waktu time wait. Jika ternyata menunggu untuk waktu yang established. Maka bisa dibayangkan server kita akan available selama 5 hari.

Kenapa membuat connection dibatasi, siapa sih yang membatasi
Secara default setiap kali kita membuat connection kita butuh yang namanya file handle. Artinya kita akan membuat yang namanya file. Sekarang didalam linux ada batasan dalam pembuatan file.
[tri@localhost ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15446
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Bisa dilihat total open files hanyalah 1024. Dari sini sudah jelas kita hanya mempunyai kapasitas tidak lebih dari 1024 connection yang dapat mengakses Server kita dengan user tri. Kenapa saya bilang tidak lebih, saya ulangi kembali karena setiap kita membuat state baru seperti SYN_RECD, ESTABLISHED atau CLOSE_WAIT kita sedang melakukan open file. Oleh karena itu kita perlu memonitornya, Apalagi jika ada state connection yang sudah waktunya closed tapi dia masih hang in on disana. Contohnya adalah koneksi ke Database dan kita tidak melakukan close connection di programnya. Itu akan mempengaruhi jumlah user yang dapat mengakses ke server kita. Karena state connection nya dipakai percuma untuk koneksi ke database yang mana sudah tidak dibutuhkan lagi.

Login SSH from linux/unix to linux/unix Using Shared Key

Tulisan ini melanjutkan dari postingan saya sebelumnya. Jika sebelumnya kita mencoba login dari windows ke linux sekarang antara linux ke linux. Secara konsepnya sama, akan tetapi di sisi client nya saja berbeda.

Linux Client

1.Kita perlu generate key kita
[tri@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tri/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tri/.ssh/id_rsa.
Your public key has been saved in /home/tri/.ssh/id_rsa.pub.
The key fingerprint is:
52:12:7a:b5:c7:bf:0a:aa:e3:90:e8:1a:96:65:62:ef tri@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|      . .        |
|     . o o       |
|    . o o o      |
|     . o . .     |
| o o  . S   .    |
|..*.   .     .   |
|ooo.    .   .    |
|o....  . . .     |
|o. Eoo.   .      |
+-----------------+
Kita bisa lihat private key(identification) dan public key sudah tergenerate automatis dan peletekan file nya. Jika ingin login tanpa password atau passphrase maka tinggal dikosongkan saja passhprhase nya. Dengan demikian server hanya akan melihat apakah user memiliki private key nya. Jika tidak sama maka akan di tolak, permission denied.
2.Kirimkan file id_rsa.pub ke server
scp id_rsa.pub usernameServer@hostnameServer:.
Dengan menjalankan command tersebut berarti kita mengirimkan file id_rsa.pub ke dalam home dari usernameServer.

Dari sini maka settingan untuk client sudah selesai. Untuk bagian server jangan lupa kita tambahkan di authorized_keys sesuai dengan artikel sebelumnya

Login SSH to linux use Putty Windows with Shared Key

Pada tulisan saya kali ini saya ingin berbagi sekaligus menjadi catatan saya sendiri. Mungkin kita sering mendapatkan masalah saat ingin melakukan login ke server linux menggunakan Putty dari Windows. Sebenarnya konsepnya hampir sama seperti saat kita ingin login dari linux ke linux menggunakan Shared Key. Perlu diingat, Shared key yang kita gunakan disini adalah public key yang akan kita generate menggunakan rsa.
Perlu dijelaskan lagi, apasih keunggulan dari login menggunakan metode ini. Keunggulanya adalah kita dapat melakukan login tanpa menggunakan password dari account yang bersangkutan cukup dengan menggunakan secret passphrase. Selain itu hanya orang yang mempunya secret key ini saja yang bisa login. Jadi ada 2 pengamanan disini. Selain harus tau passphrase nya pengguna juga harus punya secret key nya.
Langsung saja saya akan break down apa saja yang akan kita siapkan. Pertama adalah SSH Server di linux (Bisa Bebas di OS mana konsepnya hampir sama). Kemudian yang kedua adalah Client.

Bagian Client


1. Download putty.exe ,putty-keygen dan winscp
putty.exe adalah applikasi ssh client. Sedangkan putty-keygen merupakan program untuk menggenerate private key dan public key nya.
2. Open putty-keygen nya
Kemudian kita pilih pada option menggunakan rsa2 dan jumlah bit 1024. Setelah itu kita click tombol generate. Disitu kita disuruh untuk menggerakan mouse kita pada box yang tersedia. Hal itu dilakukan untuk menggenerate acak dari key kita. Kemudia kita masukan passphrase yang ingin kita masukan. Langkah terakhir kita save private key dan publik key-nya.
3. Edit Publik Key sebelum kita kirim ke server tujuan
Buka file dengan editor kesukaan anda. Kalo saya notepad ++ saja. tambahkan ssh-rsa pada bagian awal public key dan pastikan kode file tersebut dalam satu baris

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhK8zzE2lr43YlU/R3bVPsBLt2IVoRzdMQLdMjOUyjwnqVVQpq6WyVenR2+azzUM5nVaggcncGVa41F1L5LaOkn0fcQShcd2eqmBjQ8cQs0axud65wntLwO/2pfXu5mvUxyw29z0jBi/Koux8BikSOodPc7E4psbd4IvSIjrHEPbT6m0MFuITBnUOB5o1jm3OSSQuhCf+ozcpVexlsNbrqy/mm06fJ5j+Kiu8NXsXtE/gPk1UDthkyQdSA6hLM6KKpGpLrMEmziUEW9J3xZU6gPdN70HwR5np5VBiGax3DOvZ+KpRsT/hj5MixxYeB6s+yZBZ1xCcP0NziMdSufk+uQ== SVCFTP@hotname


3. Send over publik key ke server tujuan menggunakan winscp

4. Setting applikasi putty client agar login beserta private key

Click session masukan hostname or IP server tujuan. Open dengan menggunakan ssh port 22(default, Jika adaperubahan sesuaikan). Kemudian click data masukan username dari username server yang menyimpan publik key kita. Setelah itu klik pada ssh - auth dan masukan file private key kita. Itu saja konfigurasinya kemudian kita save.

Bagian Server



1. Check settingan pada /etc/ssh/sshd_config

PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Kita harus mengaktifkan RSAAuthentication dan Public Key Authentication karena itulah yang akan kita gunakan. Sedangkan AuthorizedKeysFile merupakan letak dari public key file yang akan di read oleh ssh server

2. Jika ada perubahan di sshd_config. Jangan lupa untuk dilakukan reload
/etc/init.d/sshd reload

Jika hanya perubahan konfigurasi alangkah lebih baiknya hanya kita reload aja. Sehingga tanpa mengganggu koneksi yang sedang aktif.

3. Sekarang waktunya kita membuat folder untuk meletakan key di dalam file authorized_keys

cd
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

Maksud cd diatas untuk masuk kedalam home folder si user. Kemudian perlu diingat akan permission nya. Jika tidak anda akan kebingungan apa yang salah. Saya sendiri juga pernah mengalami masalah tersebut. Tapi tenang saja kita bisa troubleshoot nya pada log /var/log/secure.

4. Masukan public key yang dikirimkan dari client ke Server kedalam authorized_keys

cd
cat publik_key >> .ssh/authorized_keys


Setelah semuanya sudah siap saat nya untuk mencobanya. Pada putty yang sudah kita setting tadi kita load dan open connection. Apabila erronya adalah our key refused berarti publik key yang kita kirimkan mengalami masalah.

Make Swagger with JavaConfig on Spring 3 MVC

Pada Postingan ini, saya ingin berbagi pengalaman build swagger di spring 3. Swagger merupakan view yang cantik dan rapi untuk diberikan untuk developer yang ingin memanfaatkan Applikasi kita. Karena setelah mencoba muter-muter searching google tidak ada yang simple dan tidak sesuai dengan applikasi saya. Maka saya akan membagikan pada anda dan sekaligus catatan untuk saya. Akan tetapi contoh yang saya berikan menggunakan cara dengan metode java config bukan by xml. Berikut postinganya semoga bermanfaat.

1. Edit pom.xml. Make sure depedency ini ada

    
org.springframework
spring-core
3.2.2.RELEASE


commons-logging
commons-logging




org.springframework
spring-web
3.2.2.RELEASE


org.springframework
spring-webmvc
3.2.2.RELEASE


com.mangofactory
swagger-springmvc
0.8.8
jar


2. Edit pada dispatcher servletnya. Kalo ditempat saya namanya mvc-dispatcher-servlet.xml file ini diconfig didalam web.xml. Didalam bean dispatchernya tambahkan

        


com.package.configuration merupakan kumpulan paket untuk konfigurasi applikasi kita. Selain untuk applikasi REST nya juga untuk konfigurasi pada swagger. Jadi bahasa panjangnya dari konfigurasi diatas. Disaat applikasi ini run dan ada request masuk dan termaping pada dispatcher ini maka akan dilakukan component scan untuk mendeteksi semua notasi untuk konfigurasi applikasi. Component Scan yang akan di scan tersebut berada di dalam package com.package.configuration.



3. Buat file java untuk configurasi di swaggernya. Ditempat saya namanya SwaggerConfig.java



@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {

private SpringSwaggerConfig springSwaggerConfig;

@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}

@Bean
public SwaggerSpringMvcPlugin customImplementation(){

return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo());
}

private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"Name REST API",
"Description Rest API",
"API TOS",
"username@youremail.com",
"API License",
"Url API License"
);
return apiInfo;
}
}

Apa yang ditulis diatas untuk melakukan configurasi swagger info nya. 4. Konfig untuk Main Applikasinya. Ditempat saya namanya AppConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.package.controller")
public class AppConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/swagger/**").addResourceLocations("/WEB-INF/swagger/");
}
}


Maksud dari code diatas melakukan ComponentScan lanjutan jika di dalam bahasa xml . Untuk Configurasi ini diberlakukan untuk semua yang ada di dalam package com.package.controller. Sedangkan addResourceHandlers untuk memapping resource yang static. Kita masukan resource static untuk template dari swagger nya. Bisa didownload disini Disini



4. Tahapan yang terakhir di sisi Main REST nya(com.package.controller). Ditempat saya namanya AppController.java



@Controller
@Api(value="test",description = "Api Mail")
@RequestMapping("/test")
public class AppController {
@ApiOperation(value = "Send a Email",notes = "This is to send email")
@RequestMapping(value="/send",method=RequestMethod.GET)
public @ResponseBody ResponseEntity sendEmail(){
//code anda
}
}

Yang perlu dicermati hanyalah @Api untuk mendeskripsikan di link rest group contoh diatas adalah /test . Jadi mungkin nanti ada banyak menjadi /test/send , /test/get. Kemudia adalah @ApiOperation juga untuk mendeskripsikan di sub link nya Jadi cukup itu saja cara mengkonfigurasikan Swagger di Spring 3. Kalo ada pertanyaan silahkan Comment


Clean shortcut ^M File di linux

    Buat temen2 yang suka koding. Pasti biasanya mengalami masalah dalam menhilangkan ^M pada kodinganya. Hal tersebut biasanya terjadi saat menggunakan file codingan dari Windows ke Linux/Unix. Untuk menghilangkab symbol tersebut ada tiga cara jika berdasarkan pendapat penulis:

1. Edit di file script kodinganya. Bisa menggunakan notepad++. Untuk melihat symbolnyq dapat kita tampilkan dengan mensetting di view->show all symbol. Kita dapat melihat bahwa ada tulisan cr lf. Yang benar untuk linux cuman lf saja. Cara menhilangkanya di file->eof->linux/unix.
2. Dengan menggunakan vi editor. Tekan :%s/^M//g. Untuk mengetikan ^M tekan ctrl+v ctrl+m
3. Yang terakhir kita gunakan dos2linux nama_file
Please copy and share it, if it helps you
 
Copyright 2009 My Note All rights reserved.
Free Blogger Templates by DeluxeTemplates.net
Wordpress Theme by EZwpthemes
Blogger Templates