Бин с именем «SpringSecurityFilterChain» не определен

Бин с именем «springSecurityFilterChain» не определен

1. Эта проблема

В этой статье обсуждается проблема конфигурации Spring Security - процесс загрузки приложения вызывает следующее исключение:

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

Дальнейшее чтение:

Введение в Java Config для Spring Security

Краткое и практическое руководство по Java Config для Spring Security

Read more

Spring Security 5 - OAuth2 Войти

Узнайте, как аутентифицировать пользователей с помощью Facebook, Google или других учетных данных с помощью OAuth2 в Spring Security 5.

Read more

Поддержка Servlet 3 Async с Spring MVC и Spring Security

Краткое введение в поддержку Spring Security для асинхронных запросов в Spring MVC.

Read more

2. Причина

Причина этого исключения проста - Spring Security ищет компонент с именемspringSecurityFilterChain (по умолчанию) и не может его найти. Этот bean-компонент требуется для основногоSpring Security Filter -DelegatingFilterProxy - определенного вweb.xml:


    springSecurityFilterChain
    org.springframework.web.filter.DelegatingFilterProxy


    springSecurityFilterChain
    /*

Это просто прокси, который делегирует всю свою логику bean-компонентуspringSecurityFilterChain.

3. Решение

Самая распространенная причина, по которой этот компонент отсутствует в контексте, заключается в том, что в конфигурации безопасности XML определенno <http> element:




Если конфигурация XML использует пространство имен безопасности - как в приведенном выше примере, то объявлениеa simple <http> element гарантирует, что bean-компонент фильтра создан и все запустится правильно:


    

Другая возможная причина заключается в том, чтоthe security configuration is not imported at all в общем контексте веб-приложения.

Если файл конфигурации XML безопасности называетсяspringSecurityConfig.xml, убедитесь, чтоthe resource is imported:

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

Или в XML:

Наконец, имя по умолчанию для компонента фильтра можно изменить вweb.xml - обычно для использования существующего фильтра с Spring Security:


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

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

В этой статье обсуждается очень специфическая проблема Spring Security - отсутствующий компонент цепочки фильтров - и показаны решения этой распространенной проблемы.