No bean named 'springSecurityFilterChain' is defined

1.問題

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

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

<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配置沒有定義<http>元素:app

<?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命名空間 - 如上例所示,則聲明一個簡單的<http>元素將確保建立過濾器bean而且全部內容都正確啓動:url

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

另外一個可能的緣由是Security配置根本不會導入到Web應用程序的總體上下文中。spa

若是安全性XML配置文件名爲springSecurityConfig.xml,請確保導入資源:代理

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

或者用XML:code

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

最後,能夠在web.xml中更改過濾器bean的默認名稱 - 一般使用帶有Spring Security的現有過濾器:xml

<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 - 並展現了這個常見問題的解決方案get

相關文章
相關標籤/搜索