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:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
这只是一个代理,它将其所有逻辑委托给springSecurityFilterChain bean。
3.解决方案
上下文中缺少此bean的最常见原因是security XML配置没有定义 元 素:
如果使用XML配置Security命名空间 - 如上例所示,则声明一个简单的 元素将确保创建过滤器bean并且所有内容都正确启动:
另一个可能的原因是Security配置根本不会导入到Web应用程序的整体上下文中。
如果安全性XML配置文件名为springSecurityConfig.xml,请确保导入资源:
@ImportResource({"classpath:springSecurityConfig.xml"})
或者用XML:
最后,可以在web.xml中更改过滤器bean的默认名称 - 通常使用带有Spring Security的现有过滤器:
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
targetBeanName
customFilter
4.总结
本文讨论了一个非常具体的Spring Security问题 - 缺少过滤器链bean - 并展示了这个常见问题的解决方案。