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 - липсващата верига на филтъра - и показва решенията на този често срещан проблем.