Es ist keine Bean mit dem Namen "springSecurityFilterChain" definiert
1. Das Problem
Dieser Artikel beschreibt ein Spring Security-Konfigurationsproblem - der Anwendungs-Bootstrapping-Prozess löst die folgende Ausnahme aus:
SEVERE: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'springSecurityFilterChain' is defined
Weitere Lektüre:
Einführung in Java Config für Spring Security
Eine schnelle und praktische Anleitung zu Java Config für Spring Security
Spring Security 5 - OAuth2-Anmeldung
In Spring Security 5 erfahren Sie, wie Sie Benutzer mit Facebook, Google oder anderen Anmeldeinformationen mithilfe von OAuth2 authentifizieren.
Servlet 3 Async Support mit Spring MVC und Spring Security
Schnelle Einführung in die Unterstützung von Spring Security für asynchrone Anforderungen in Spring MVC.
2. Die Ursache
Die Ursache für diese Ausnahme ist unkompliziert: Spring Security sucht (standardmäßig) nach einer Bean mit dem NamenspringSecurityFilterChain und kann sie nicht finden. Diese Bohne wird von den HauptSpring Security Filter - denDelegatingFilterProxy - benötigt, die inweb.xml definiert sind:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
Dies ist nur ein Proxy, der seine gesamte Logik an diespringSecurityFilterChain-Bohne delegiert.
3. Die Lösung
Der häufigste Grund, warum diese Bean im Kontext fehlt, ist, dass in der Sicherheits-XML-Konfigurationno <http> elementdefiniert ist:
Wenn die XML-Konfiguration den Sicherheits-Namespace verwendet - wie im obigen Beispiel - wird durch Deklarieren vona simple <http> element sichergestellt, dass die Filter-Bean erstellt wird und alles ordnungsgemäß gestartet wird:
Ein weiterer möglicher Grund ist, dassthe security configuration is not imported at allim Gesamtkontext der Webanwendung enthalten ist.
Wenn die Sicherheits-XML-KonfigurationsdateispringSecurityConfig.xml heißt, stellen Sie sicher, dassthe resource is imported:
@ImportResource({"classpath:springSecurityConfig.xml"})
Oder in XML:
Schließlich kann der Standardname der Filter-Bean inweb.xml geändert werden - normalerweise, um einen vorhandenen Filter mit Spring Security zu verwenden:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
targetBeanName
customFilter
4. Fazit
Dieser Artikel beschreibt ein sehr spezifisches Spring Security-Problem - die fehlende Filterketten-Bean - und zeigt die Lösungen für dieses häufige Problem.