知識庫 / Spring / Spring Security RSS 訂閱

Spring Security 過濾器鏈未定義

Spring Security
HongKong
7
03:09 PM · Dec 06 ,2025

1. 問題

本文討論了一個 Spring Security 配置問題——應用程序引導過程拋出以下異常:

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

2. 根本原因

該異常的根本原因非常明確——Spring Security 查找名為 springSecurityFilterChain (默認情況下) 的 Bean,但未能找到該 Bean。該 Bean 是由主 Spring Security Filter – 即 DelegatingFilterProxy – 在 web.xml 中定義的:

<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>

這只是一個代理,它將所有邏輯委託給 springSecurityFilterChain 這一 Bean。

3. 解決方案

該豆類缺失的原因通常是安全 XML 配置中缺少 <em>http> 元素:

<?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>元素將確保過濾器 Bean 被創建,並且一切都能夠正確啓動:

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

另一個可能的原因是,安全配置根本沒有導入到整個 Web 應用程序的上下文中。

如果安全 XML 配置文件的名稱為 springSecurityConfig.xml,請確保 資源已導入

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

或者以 XML 格式:

<import resource="classpath:springSecurityConfig.xml" />

最後,過濾器的默認名稱可以在 web.xml 中進行更改——通常是使用現有的 Spring Security 過濾器:

<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,並展示瞭解決此常見問題的方案。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.