No Bean Named 'springSecurityFilterChain' Ditakrifkan

1. Masalahnya

Artikel ini membincangkan masalah konfigurasi Spring Security - proses bootstrap aplikasi yang memberikan pengecualian berikut:

SEVERE: Exception starting filter springSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined

2. Sebabnya

Punca pengecualian ini adalah mudah - Spring Security mencari kacang bernama springSecurityFilterChain (secara lalai), dan tidak dapat menemuinya. Kacang ini diperlukan oleh Penapis Keselamatan Musim Semi utama - DelegatingFilterProxy - yang ditentukan dalam web.xml :

 springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy   springSecurityFilterChain /* 

Ini hanyalah proksi yang mewakilkan semua logiknya ke kacang springSecurityFilterChain .

3. Penyelesaiannya

Sebab yang paling umum kacang ini hilang dari konteksnya ialah konfigurasi XML keselamatan tidak mempunyaielemen yang ditentukan:

Sekiranya konfigurasi XML menggunakan ruang nama keselamatan - seperti contoh di atas, maka menyatakan elemen sederhana akan memastikan bahawa kacang penapis dibuat dan semuanya bermula dengan betul:

Sebab lain yang mungkin adalah bahawa konfigurasi keselamatan sama sekali tidak diimport ke dalam konteks keseluruhan aplikasi web.

Sekiranya fail konfigurasi XML keselamatan bernama springSecurityConfig.xml , pastikan sumber diimport :

@ImportResource({"classpath:springSecurityConfig.xml"})

Atau dalam XML:

Akhirnya, nama lalai kacang penapis dapat ditukar di web.xml - biasanya untuk menggunakan Penapis yang ada dengan Spring Security:

 springSecurityFilterChain  org.springframework.web.filter.DelegatingFilterProxy   targetBeanName customFilter  

4. Kesimpulan

Artikel ini membincangkan masalah Keselamatan Musim Bunga yang sangat spesifik - kacang rantai penapis yang hilang - dan menunjukkan penyelesaian untuk masalah biasa ini.