Apa cara yang benar untuk menambahkan interseptor HttpRequest di aplikasi boot musim semi? Yang ingin saya lakukan adalah mencatat permintaan dan tanggapan untuk setiap permintaan http.
Dokumentasi boot musim semi tidak mencakup topik ini sama sekali. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
Saya menemukan beberapa contoh web tentang cara melakukan hal yang sama dengan versi pegas yang lebih lama, tetapi contoh tersebut berfungsi dengan applicationcontext.xml. Tolong bantu.
java
spring
spring-mvc
spring-boot
riship89.dll
sumber
sumber
HandlerInterceptor
berhasil menerapkan . Ini bekerja dengan baik. Hanya masalahnya, beberapainternal HandlerInterceptor
melempar pengecualian sebelum ditangani olehcustom HandlerInterceptor
. TheafterCompletion()
Metode yang ditimpa disebut setelah kesalahan dilemparkan oleh pelaksanaan internal HandlerInterceptor. Apakah Anda punya solusi untuk ini?Jawaban:
Karena Anda menggunakan Spring Boot, saya berasumsi Anda lebih suka mengandalkan konfigurasi otomatis Spring jika memungkinkan. Untuk menambahkan konfigurasi khusus tambahan seperti interseptor Anda, cukup berikan konfigurasi atau kacang
WebMvcConfigurerAdapter
.Berikut adalah contoh kelas config:
CATATAN jangan anotasi ini dengan @EnableWebMvc, jika Anda ingin menyimpan konfigurasi otomatis Spring Boots untuk mvc .
sumber
The type WebMvcConfigurerAdapter is deprecated
. Saya menggunakan Spring Web MVC 5.0.6WebMvcConfigurerAdapter
akan dihentikan dengan Spring 5. Dari Javadoc -nya :Seperti yang dinyatakan di atas, yang harus Anda lakukan adalah menerapkan
WebMvcConfigurer
dan menggantiaddInterceptors
metode.sumber
MyCustomInterceptor
Untuk menambahkan interseptor ke aplikasi boot musim semi, lakukan hal berikut
Buat kelas interseptor
Tentukan kelas konfigurasi
Itu dia. Sekarang semua permintaan Anda akan melewati logika yang ditentukan di bawah metode preHandle () dari MyCustomInterceptor.
sumber
getReader() has already been called for this request
kesalahan. Apakah ada cara yang lebih sederhana untuk mengatasi ini tanpa menggunakan salinan permintaan sebenarnya?Advice
Karena semua tanggapan terhadap hal ini menggunakan Adaptor WebMvcConfigurer abstrak yang sekarang sudah lama tidak digunakan lagi, bukan WebMvcInterface (seperti yang telah disebutkan oleh @sebdooe), berikut ini contoh minimal yang berfungsi untuk aplikasi SpringBoot (2.1.4) dengan Interceptor:
Minimal.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
bekerja seperti yang diiklankan
Outputnya akan memberi Anda sesuatu seperti:
sumber
Saya memiliki masalah yang sama dengan WebMvcConfigurerAdapter yang sudah tidak digunakan lagi. Ketika saya mencari contoh, saya hampir tidak menemukan kode yang diterapkan. Ini adalah bagian dari kode yang berfungsi.
buat kelas yang memperluas HandlerInterceptorAdapter
lalu Implementasikan antarmuka WebMvcConfigurer
sumber
Anda juga dapat mempertimbangkan untuk menggunakan pustaka SpringSandwich open source yang memungkinkan Anda secara langsung membuat anotasi di pengontrol Spring Boot yang akan diterapkan interseptor, sama seperti saat Anda memberi anotasi pada rute url Anda.
Dengan begitu, tidak ada String yang rawan kesalahan ketik yang beredar - metode SpringSandwich dan anotasi kelas dengan mudah bertahan dalam pemfaktoran ulang dan memperjelas apa yang diterapkan di mana. (Pengungkapan: Saya adalah penulisnya).
http://springsandwich.com/
sumber
Di bawah ini adalah implementasi yang saya gunakan untuk mencegat setiap permintaan HTTP sebelum keluar dan respons yang kembali. Dengan implementasi ini, saya juga memiliki satu titik di mana saya dapat meneruskan nilai header apa pun dengan permintaan tersebut.
Di bawah ini adalah Rest Template Bean
sumber