Keine Bean mit dem Namen "springSecurityFilterChain" ist definiert

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

Read more

Spring Security 5 - OAuth2-Anmeldung

In Spring Security 5 erfahren Sie, wie Sie Benutzer mit Facebook, Google oder anderen Anmeldeinformationen mithilfe von OAuth2 authentifizieren.

Read more

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.

Read more

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.