Nenhum Bean chamado 'springSecurityFilterChain' está definido
1. O problema
Este artigo discute um problema de configuração do Spring Security - o processo de inicialização do aplicativo lançando a seguinte exceção:
SEVERE: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'springSecurityFilterChain' is defined
Leitura adicional:
Introdução ao Java Config para Spring Security
Um guia rápido e prático para o Java Config for Spring Security
Spring Security 5 - Login do OAuth2
Aprenda como autenticar usuários com o Facebook, Google ou outras credenciais usando o OAuth2 no Spring Security 5.
Suporte assíncrono do Servlet 3 com Spring MVC e Spring Security
Introdução rápida ao suporte do Spring Security para solicitações assíncronas no Spring MVC.
2. A causa
A causa desta exceção é direta - Spring Security procura por um bean chamadospringSecurityFilterChain (por padrão), e não consegue encontrá-lo. Este bean é exigido peloSpring Security Filter principal - oDelegatingFilterProxy - definido noweb.xml:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
Este é apenas um proxy que delega toda a sua lógica ao beanspringSecurityFilterChain.
3. A solução
A razão mais comum pela qual esse bean está ausente do contexto é que a configuração XML de segurança temno <http> element definido:
Se a configuração XML estiver usando o namespace de segurança - como no exemplo acima, declarara simple <http> element garantirá que o bean de filtro seja criado e tudo inicialize corretamente:
Outra razão possível é quethe security configuration is not imported at all no contexto geral do aplicativo da web.
Se o arquivo de configuração XML de segurança for denominadospringSecurityConfig.xml, certifique-se dethe resource is imported:
@ImportResource({"classpath:springSecurityConfig.xml"})
Ou em XML:
Finalmente, o nome padrão do bean de filtro pode ser alterado noweb.xml - normalmente para usar um filtro existente com Spring Security:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
targetBeanName
customFilter
4. Conclusão
Este artigo discute um problema muito específico do Spring Security - o bean de cadeia de filtro ausente - e mostra as soluções para esse problema comum.