获取错误org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“springSecurityFilterChain”的bean

我正在运行使用Spring安全的NTLM,我收到以下错误

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“springSecurityFilterChain”的bean

我怎样才能解决这个错误?

我有以下在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> 

更新1

我解决了这个错误,现在我正在接受

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“filterSecurityInterceptor”的bean

我有以下几点

 <bean id="springSecurityFilterChain" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter, exceptionTranslationFilter, ntlmFilter, filterSecurityInterceptor </value> </property> </bean>` 

我改变了我的applicationContext.xml如下,因为像@西恩帕特里克·弗洛伊德提到一些元素是老的,死了,埋没。 不过,我现在有其他错误需要修复:-)

谢谢

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd"> <!--<authentication-manager alias="_authenticationManager"></authentication-manager>--> <security:authentication-provider> <security:user-service> <security:user name="testuser" password="PASSWORD" authorities="ROLE_USER, ROLE_ADMIN"/> <security:user name="administrator" password="PASSWORD" authorities="ROLE_USER,ROLE_ADMIN"/> </security:user-service> </security:authentication-provider> <bean id="userDetailsAuthenticationProvider" class="com.icesoft.icefaces.security.UserDetailsAuthenticationProvider"> <security:custom-authentication-provider/> </bean> <bean id="ntlmEntryPoint" class="org.springframework.security.ui.ntlm.NtlmProcessingFilterEntryPoint"> <property name="authenticationFailureUrl" value="/accessDenied.jspx"/> </bean> <bean id="ntlmFilter" class="org.springframework.security.ui.ntlm.NtlmProcessingFilter"> <security:custom-filter position="NTLM_FILTER"/> <property name="stripDomain" value="true"/> <property name="defaultDomain" value="domain"/> <property name="netbiosWINS" value="domain"/> <property name="authenticationManager" ref="_authenticationManager"/> </bean> <bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint" ref="ntlmEntryPoint"/> </bean> <security:http access-decision-manager-ref="accessDecisionManager" entry-point-ref="ntlmEntryPoint"> <security:intercept-url pattern="/accessDenied.jspx" filters="none"/> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http> <bean id="accessDecisionManager" class="org.springframework.security.vote.UnanimousBased"> <property name="allowIfAllAbstainDecisions" value="false"/> <property name="decisionVoters"> <list> <bean id="roleVoter" class="org.springframework.security.vote.RoleVoter"/> </list> </property> </bean> </beans> 

DelegatingFilterProxy文档:

请注意,filter实际上是一个DelegatingFilterProxy,而不是实际实现filter逻辑的类。 DelegatingFilterProxy所做的是将Filter的方法委托给从Spring应用程序上下文获得的bean 。 这使bean可以从Spring Web应用程序上下文生命周期支持和configuration灵活性中受益。 该bean必须实现javax.servlet.Filter,并且它必须与filter-name元素中的名称相同 。 阅读Javadoc的DelegatingFilterProxy获取更多信息

您需要定义一个名为springSecurityFilterChain的bean,在您的应用程序上下文中实现javax.servlet.Filter

从安全命名空间入门入门 :

如果您熟悉框架的命名空间版本,您可能已经可以大概猜出这里发生了什么。 <http>元素负责创build一个FilterChainProxy和它使用的filterbean 。 不正确的filtersorting等常见问题不再是问题,因为filter位置是预定义的。

所以你至less需要一个最小的<http>configuration

肖恩·帕特里克·弗洛伊德(Sean Patrick Floyd)是绝对正确的,但我认为值得一提的是一个解决scheme,这对我来说花了很多时间

您只需添加@ImportResource注释。

 @Configuration @EnableWebMvc @ComponentScan(basePackages = {"org.company"}) @ImportResource({"classpath:security.xml"}) public class CompanyWebMvcConfiguration extends WebMvcConfigurerAdapter { } 

security.xml文件:

 <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http use-expressions="true"> <access-denied-handler error-page="/error"/> </http> 

在Javaconfiguration中,您可以使用以下注释:

 @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity public class MySecurityConfig extends WebSecurityConfigurerAdapter { } 

这将导入定义springSecurityFilterChain bean的org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurationconfiguration类。

请用最less的configuration提供spring安全文件

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring- security-3.0.3.xsd “>

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