「springSecurityFilterChain」という名前のBeanが定義されていません

「springSecurityFilterChain」という名前のBeanは定義されていません

1. 問題

この記事では、Spring Securityの構成の問題、つまりアプリケーションのブートストラッププロセスが次の例外をスローすることについて説明します。

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

参考文献:

Spring SecurityのJava Configの概要

Spring SecurityのJava Configの迅速で実用的なガイド

Spring Security 5 – OAuth2ログイン

Spring Security 5のOAuth2を使用して、Facebook、Google、またはその他の資格情報でユーザーを認証する方法を学びます。

Spring MVCおよびSpring Securityによるサーブレット3非同期サポート

Spring MVCでの非同期リクエストに対するSpring Securityサポートの簡単な紹介。

2. 原因

この例外の原因は単純です。SpringSecurityはspringSecurityFilterChain(デフォルト)という名前のBeanを探しますが、見つけることができません。 このBeanは、web.xmlで定義されているメインのSpring Security FilterDelegatingFilterProxy –で必要です。


    springSecurityFilterChain
    org.springframework.web.filter.DelegatingFilterProxy


    springSecurityFilterChain
    /*

これは、すべてのロジックをspringSecurityFilterChainBeanに委任する単なるプロキシです。

3. ソリューション

このBeanがコンテキストから欠落している最も一般的な理由は、セキュリティXML構成にno <http> elementが定義されていることです。




XML構成がセキュリティ名前空間を使用している場合(上記の例のように)、a simple <http> elementを宣言すると、フィルターBeanが作成され、すべてが正しく起動します。


    

もう1つの考えられる理由は、the security configuration is not imported at allがWebアプリケーションの全体的なコンテキストに含まれていることです。

セキュリティXML構成ファイルの名前がspringSecurityConfig.xmlの場合は、the resource is importedを確認してください。

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

またはXMLで:

最後に、フィルターBeanのデフォルト名をweb.xmlで変更できます。通常は、SpringSecurityで既存のフィルターを使用します。


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

4. 結論

この記事では、非常に具体的なSpring Securityの問題-欠落しているフィルターチェーンBean-について説明し、この一般的な問題の解決策を示します。