Dari HandlerIntercepter's javadoc :
HandlerInterceptorpada 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
HandlerInterceptordalam konteks aplikasi.
Sebagai pedoman dasar, tugas pra-pemrosesan terkait penangan yang sangat detail adalah kandidat untuk HandlerInterceptorimplementasi, terutama kode penangan umum yang difaktorkan keluar dan pemeriksaan otorisasi. Di sisi lain, a Filtercocok 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()?
postHandleakan dipanggil setelah pemanggilan metode penangan tetapi sebelum tampilan dirender. Jadi, Anda bisa menambahkan lebih banyak objek model ke tampilan tapi Anda tidak bisa mengubahnya HttpServletResponsekarena sudah dilakukan.
doFilterjauh lebih serbaguna daripada postHandle. Anda dapat mengubah permintaan atau tanggapan dan meneruskannya ke rantai atau bahkan memblokir pemrosesan permintaan.
Selain itu, dalam preHandledan postHandlemetode, Anda memiliki akses ke HandlerMethodyang 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 HandlerInterceptorimplementasi, terutama kode penangan umum yang difaktorkan keluar dan pemeriksaan otorisasi. Di sisi lain, a Filtercocok 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.