No bean named 'springSecurityFilterChain' is defined


1.問題

本文討論Spring安全配置問題 - 應用程序引導過程拋出以下異常:

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

2.原因

此異常的原因很簡單 - Spring Security查找名為springSecurityFilterChain的bean(默認情況下),但無法找到它。主要的Spring安全過濾器 - DelegatingFilterProxy - 在web.xml中定義了這個bean:

<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.解決方案

上下文中缺少此bean的最常見原因是security 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配置Security命名空間 - 如上例所示,則聲明一個簡單的 元素將確保創建過濾器bean並且所有內容都正確啟動:

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

另一個可能的原因是Security配置根本不會導入到Web應用程序的整體上下文中。

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

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

或者用XML:

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

最后,可以在web.xml中更改過濾器bean的默認名稱 - 通常使用帶有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 - 並展示了這個常見問題的解決方案


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM