Untuk memanfaatkan suntikan pergantungan Spring, adalah perkara biasa untuk mendaftarkan penapis sebagai kacang dalam Spring Boot, biasanya menggunakan @Autowire. Walau bagaimanapun, ini boleh menyebabkan penapis digunakan dua kali.
Seperti yang anda perhatikan, Spring Boot secara automatik mendaftarkan penapis yang ditandakan sebagai kacang dengan bekas servlet. Ini bermakna penapis anda yang didaftarkan melalui @Bean akan digunakan oleh Spring Security dan juga bekas.
Terdapat dua pendekatan utama untuk menyelesaikan isu ini:
1. Cegah Pendaftaran Automatik:
Jika anda tidak perlu mengautomasikan kebergantungan ke dalam penapis anda, cuma elakkan daripada mendedahkannya sebagai kacang. Sebaliknya, takrifkannya sebagai kelas Java biasa dan daftarkannya secara manual dengan Spring Security sahaja:
http.addFilterBefore(new YourFilter(), BasicAuthenticationFilter.class);
2. Lumpuhkan Pendaftaran Spring Boot:
Untuk mendaftarkan penapis anda secara manual dan masih menggunakan suntikan kebergantungan, anda boleh memanfaatkan FilterRegistrationBean:
@Bean public FilterRegistrationBean registration(YourFilter filter) { FilterRegistrationBean<YourFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); // Disable Spring Boot registration return registration; }
Konfigurasi ini menghalang Spring Boot daripada mendaftarkan penapis anda tetapi membenarkan anda untuk menentukan kacang penapis untuk suntikan kebergantungan Spring.
Atas ialah kandungan terperinci Mengapa Penapis Spring Saya Dikenakan Dua Kali Apabila Ditakrifkan sebagai Kacang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!