Proyek ini adalah proyek Maven berdasarkan kerangka kerja Springboot.
Hari ini, saat menangani logika pencegat di pencegat, Anda perlu memanggil metode lain menggunakan anotasi dan membaca parameter dari file konfigurasi. Jadi saya menggunakan anotasi berikut:
@Reference CoreredisService RedisService; @Value ("$ {channel}") Private String Channel; @Value ("$ {izinMethod}") Private String AllowMethod; Salah satunya adalah mendapatkan referensi ke antarmuka, dua lainnya adalah untuk mendapatkan parameter dalam file konfigurasi.
Namun, selama proses debugging, saya menemukan bahwa tidak satu pun dari ketiganya disuntikkan dan situasi yang ditunjukkan pada gambar di bawah ini terjadi:
Anda dapat melihat bahwa ketiga nilai itu nol.
Saya kemudian melihat konfigurasi proyek saya untuk menentukan apakah posisi pencegat berada dalam ruang lingkup anotasi. Saya tidak menemukan masalah. Saya menemukan masalah pada Baidu dan menemukan masalah: waktu ketika muatan pencegat sebelum SpringContext, sehingga secara alami nol disuntikkan ke Interceptor.
Menurut solusi, interseptor pertama kali disuntikkan ke kelas yang mengkonfigurasi rantai pencegat. Kodenya adalah sebagai berikut:
paket com. ***; impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.configuration; impor org.springframework.web.servlet.config.annotation.interceptorregistry; impor org.springframework.web.servlet.config.annotation.webmvcconfigurerAdapter;/*** ConfigurationInterCeporChain* Dibuat oleh Yefuliang pada 2017/10/23. */ @Configurationpublic kelas bgqwebappconfigure memperluas webmvcconfigurerAdapter {@bean public bgqcommoninteptorl bgqCommoninterceptorl () {return bgqCommoninterceptorl () baru; } public void addInterceptors (InterceptorRegistry Registry) {// Beberapa pencegat membentuk rantai interceptor // addPathPatterns digunakan untuk menambahkan aturan pencegat // excludePathPatterns Pengguna pengecualian intercept Registry.addInterceptor (BGQCommonInterceptorl ()). AddPathPatterns (" Super.AddInterceptors (Registry); }} Perhatikan bahwa yang disuntikkan adalah kelas pencegat, bukan kelas yang ingin Anda suntikan ke interseptor, dan kemudian rantai interceptor Registry.addInterceptor (bgqCommonInterceptorl ()). AddPathPatterns ("/**");
Anda tidak perlu menyalakan kembali parameter pertama di dalamnya.
Setelah modifikasi diperbaiki, debug:
Seperti yang Anda lihat, semua disuntikkan ke dalamnya dan masalahnya terpecahkan.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.