Tidak Ada Bean Bernama 'springSecurityFilterChain' yang Ditentukan

1. Masalahnya

Artikel ini membahas masalah konfigurasi Keamanan Musim Semi - proses bootstrap aplikasi yang menimbulkan pengecualian berikut ini:

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

2. Penyebabnya

Penyebab pengecualian ini sangat mudah - Spring Security mencari kacang bernama springSecurityFilterChain (secara default), dan tidak dapat menemukannya. Kacang ini diperlukan oleh Filter Keamanan Musim Semi utama - DelegatingFilterProxy - yang ditentukan di web.xml :

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

Ini hanyalah proxy yang mendelegasikan semua logikanya ke bean springSecurityFilterChain .

3. Solusi

Alasan paling umum kacang ini hilang dari konteksnya adalah karena konfigurasi XML keamanan tidak memilikielemen didefinisikan:

Jika konfigurasi XML menggunakan ruang nama keamanan - seperti contoh di atas, maka mendeklarasikan elemen sederhana akan memastikan bahwa kacang filter dibuat dan semuanya dimulai dengan benar:

Alasan lain yang mungkin adalah bahwa konfigurasi keamanan tidak diimpor sama sekali ke dalam konteks keseluruhan aplikasi web.

Jika file konfigurasi XML keamanan bernama springSecurityConfig.xml , pastikan sumber daya diimpor :

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

Atau dalam XML:

Akhirnya, nama default dari filter bean dapat diubah di web.xml - biasanya menggunakan Filter yang ada dengan Spring Security:

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

4. Kesimpulan

Artikel ini membahas masalah Keamanan Musim Semi yang sangat spesifik - kacang rantai filter yang hilang - dan menunjukkan solusi untuk masalah umum ini.