‘springSecurityFilterChain’という名前のBeanが定義されていません
1. 問題
この記事では、Spring Securityの構成の問題、つまりアプリケーションのブートストラッププロセスが次の例外をスローすることについて説明します。
SEVERE: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'springSecurityFilterChain' is defined
2. 原因
この例外の原因は単純です。SpringSecurityはspringSecurityFilterChain(デフォルト)という名前のBeanを探しますが、見つけることができません。 このBeanは、web.xmlで定義されているメインのSpringSecurity Filter – DelegatingFilterProxy –で必要です。
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
これは、すべてのロジックをspringSecurityFilterChainBeanに委任する単なるプロキシです。
3. ソリューション
このBeanがコンテキストから欠落している最も一般的な理由は、セキュリティXML構成に番号
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
</beans:beans>
XML構成がセキュリティ名前空間を使用している場合–上記の例のように、宣言するシンプルな
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
もう1つの考えられる理由は、セキュリティ構成がWebアプリケーションの全体的なコンテキストにまったくインポートされていないことです。
セキュリティXML構成ファイルの名前がspringSecurityConfig.xmlの場合は、リソースがインポートされていることを確認してください。
@ImportResource({"classpath:springSecurityConfig.xml"})
またはXMLの場合:
<import resource="classpath:springSecurityConfig.xml" />
最後に、フィルターBeanのデフォルト名は、 web.xml で変更できます。通常は、SpringSecurityで既存のフィルターを使用します。
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>customFilter</param-value>
</init-param>
</filter>
4. 結論
この記事では、非常に具体的なSpring Securityの問題(フィルターチェーンBeanの欠落)について説明し、この一般的な問題の解決策を示します。