Filter di Spring Web MVC Menggunakan HandlerInterceptor

Eko Kurniawan Khannedy
idspring
Published in
2 min readOct 15, 2017

Yang sudah terbiasa membuat web menggunakan Servlet, pasti sudah tidak asing lagi dengan yang namanya HttpFilter. Class yang dapat kita gunakan untuk melakukan proses filter (sebelum dan setelah) untuk class Servlet yang kita buat.

Cara kerja Filter

Spring Web MVC sendiri sebenarnya adalah framework web Spring yang berjalan diatas Servlet. Namun tidak direkomendasikan jika kita membuat HttpFilter nya Servlet. Jika kita ingin membuat filter, sangat disarankan menggunakan HandlerInterceptor milik Spring Web MVC.

HandlerInterceptor

Cara kerja HandlerInterceptor mirip sekali dengan HttpFilter. Dimana HandlerInterceptor akan dieksekusi sebelum dan setelah Spring Controller dijalankan. Jika kita liat isi HandlerInterceptor, ada beberapa method yang dapat kita gunakan untuk melakukan filter.

Isi Interface HandlerInterceptor
  • preHandle, method ini akan dieksekusi sebelum Controller dieksekusi.
  • postHandle, method ini akan dieksekusi setelah Controller dieksekusi, tapi sebelum view di render.
  • afterCompletion, method ini akan dieksekusi setelah view di render.

Untuk Apa HandlerInterceptor?

Jika ditanya, kenapa kita butuh HandlerInterceptor? dan kapan kita bisa menggunakan HandlerInterceptor? Jawabannya sederhana.

Saat kita membuat code yang berulang di action Controller.

Apa aja yang biasa kita buat berulang di action Controller? Contohnya seperti :

  • Autentikasi user login.
  • Monitoring
  • Logging
  • dan lain-lain.

Misal, kita membuat Backend RESTful, dimana client harus mengirim API-Key menggunakan BasicAuth. Dari pada kita validasi API-Key nya di tiap action controller, lebih baik kita validasi di HandlerInterceptor, sehingga jika request dari client masuk ke action Controller, kita sudah bisa pastikan kalo request tersebut sudah ter-autentikasi.

Demo HandlerInterceptor

Sekarang kita coba buat contoh demo HandlerInterceptor. Sederhana saya, kita akan membuat HandlerInterceptor yang melakukan filter, jika di HTTP Request terdapat parameter “secure=true”, kita anggap requestnya Valid, jika tidak ada parameter “secure=true”, kita tolak requestnya, dan beli response UNAUTHORIZED 401.

Contoh HandlerInterceptor

Mendaftarkan HandlerInterceptor

HandlerInterceptor tidak bisa secara otomatis berjalan, kita perlu mendaftarkan HandlerInterceptor ke InterceptorRegistry. Caranya kita perlu membuat configuration WebMvcConfigurer, lalu meregistrasikan HandlerInterceptor kita di method addInterceptors().

Mendaftarkan HandlerInterceptor ke InterceptorRegistry

Sekarang semua HTTP Request dari client, akan divalidasi terlebih dahulu oleh DemoInterceptor, jika valid maka request akan diteruskan ke action Controller, jika tidak valid, request akan ditolak oleh DemoInterceptor.

Request ditolak dengan status 401 UNAUTHORIZED
Request valid

Referensi

--

--