Не е дефиниран боб, наречен „springSecurityFilterChain“

1. Проблемът

Тази статия обсъжда проблем с конфигурацията на Spring Security - процесът на зареждане на приложението, изхвърлящ следното изключение:

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

2. Причината

Причината за това изключение е ясна - Spring Security търси боб с име springSecurityFilterChain (по подразбиране) и не може да го намери. Този боб се изисква от основния пролетен филтър за сигурност - DelegatingFilterProxy - дефиниран в web.xml :

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

Това е просто прокси, който делегира цялата си логика на боб springSecurityFilterChain .

3. Решението

Най-честата причина този компонент да липсва в контекста е, че XML конфигурацията на защитата нямадефиниран елемент :

Ако конфигурацията на XML използва пространството от имена на защитата - като примера по-горе, тогава декларирането на прост елемент ще гарантира, че филтърният компонент е създаден и всичко стартира правилно:

Друга възможна причина е, че конфигурацията на защитата изобщо не се импортира в общия контекст на уеб приложението.

Ако конфигурационният файл за защита на XML е с име springSecurityConfig.xml , уверете се, че ресурсът е импортиран :

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

Или в XML:

И накрая, името по подразбиране на филтъра може да бъде променено в web.xml - обикновено за използване на съществуващ филтър с Spring Security:

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

4. Заключение

Тази статия обсъжда един много специфичен проблем на Spring Security - липсващата верига на филтъра - и показва решенията на този често срещан проблем.