Dari HandlerIntercepter
's javadoc :
HandlerInterceptor
pada dasarnya mirip dengan Servlet Filter
, tetapi berbeda dengan Servlet , ia hanya mengizinkan pra-pemrosesan kustom dengan opsi untuk melarang eksekusi penangan itu sendiri, dan pasca-pemrosesan kustom. Filter lebih kuat, misalnya memungkinkan untuk menukar objek permintaan dan respons yang diturunkan rantai. Perhatikan bahwa filter dikonfigurasi dalam web.xml
, a
HandlerInterceptor
dalam konteks aplikasi.
Sebagai pedoman dasar, tugas pra-pemrosesan terkait penangan yang sangat detail adalah kandidat untuk HandlerInterceptor
implementasi, terutama kode penangan umum yang difaktorkan keluar dan pemeriksaan otorisasi. Di sisi lain, a Filter
cocok untuk konten permintaan dan penanganan konten tampilan, seperti formulir multi-bagian dan kompresi GZIP. Ini biasanya menunjukkan ketika seseorang perlu memetakan filter ke tipe konten tertentu (misalnya gambar), atau ke semua permintaan.
Dengan itu dikatakan:
Jadi di manakah perbedaan antara Interceptor#postHandle()
dan
Filter#doFilter()
?
postHandle
akan dipanggil setelah pemanggilan metode penangan tetapi sebelum tampilan dirender. Jadi, Anda bisa menambahkan lebih banyak objek model ke tampilan tapi Anda tidak bisa mengubahnya HttpServletResponse
karena sudah dilakukan.
doFilter
jauh lebih serbaguna daripada postHandle
. Anda dapat mengubah permintaan atau tanggapan dan meneruskannya ke rantai atau bahkan memblokir pemrosesan permintaan.
Selain itu, dalam preHandle
dan postHandle
metode, Anda memiliki akses ke HandlerMethod
yang memproses permintaan. Jadi, Anda dapat menambahkan logika pra / pasca-pemrosesan berdasarkan penangan itu sendiri. Misalnya, Anda dapat menambahkan logika untuk metode penangan yang memiliki beberapa anotasi.
Apa praktik terbaik yang harus digunakan dalam kasus penggunaan?
Seperti yang dikatakan dokumen, tugas pra-pemrosesan terkait penangan yang sangat detail adalah kandidat untuk HandlerInterceptor
implementasi, terutama kode penangan umum yang difaktorkan keluar dan pemeriksaan otorisasi. Di sisi lain, a Filter
cocok untuk konten permintaan dan penanganan konten tampilan, seperti formulir multi-bagian dan kompresi GZIP. Ini biasanya menunjukkan ketika seseorang perlu memetakan filter ke tipe konten tertentu (misalnya gambar), atau ke semua permintaan.