Rumah > Java > javaTutorial > Mengapa Penapis Spring Saya Dikenakan Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Penapis Spring Saya Dikenakan Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Lepaskan: 2024-12-09 03:00:15
asal
962 orang telah melayarinya

Why is My Spring Filter Being Invoked Twice, and How Can I Fix It?

Tapis Berdaftar Dua Kali dengan Anotasi Spring Bean

Apabila mendaftarkan penapis sebagai Spring bean, adalah penting untuk mempertimbangkan potensi untuk berbilang seruan . Dalam senario tertentu, penapis mungkin dicetuskan dua kali, seperti yang diperhatikan dalam isu berikut:

Isu:

Seorang pengguna mentakrifkan penapis, A, yang memanjangkan GenericFilterBean Spring . Apabila penapis ini didaftarkan sebagai kacang dalam konfigurasi Spring Security, seruan tambahan akan diperhatikan, menghasilkan output berikut:

filter A before
filter A before
mycontroller invoke
filter A after
filter A after
Salin selepas log masuk

Pertanyaan:

Mengapa adakah penapis dipanggil dua kali, dan bagaimana isu ini boleh berlaku diselesaikan?

Jawapan:

Seruan tambahan berlaku kerana Spring Boot secara automatik mendaftarkan sebarang kacang jenis Penapis dengan bekas servlet. Untuk mengelakkan ini, terdapat dua pilihan:

Pilihan 1: Daftar Penapis dengan Keselamatan Spring Sahaja

Elakkan daripada mendedahkan penapis sebagai kacang dan daftarkannya semata-mata dengan Spring Security , seperti berikut:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(new A(), BasicAuthenticationFilter.class);
    http.csrf().disable();
}
Salin selepas log masuk

Pilihan 2: Gunakan FilterRegistrationBean dengan Anotasi

Jika kebergantungan pendawaian automatik ke dalam penapis diperlukan, seseorang boleh mendaftarkannya sebagai kacang tetapi melumpuhkan pendaftaran automatiknya dengan bekas servlet menggunakan FilterRegistrationBean:

@Bean
public FilterRegistrationBean registration(MyFilter filter) {
    FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>(filter);
    registration.setEnabled(false);
    return registration;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Penapis Spring Saya Dikenakan Dua Kali, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan