0

添加过滤器链代理 bean 时出现此错误。我想我必须创建一个名为 securityContextPersistenceFilterWithASCTrue 的 bean,但示例中没有显示这样的 bean。有什么解决办法吗?

SEVERE: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 
'filterChainProxy' defined in ServletContext resource [/WEB-INF/spring-security.xml]:     Cannot resolve reference to bean 'securityContextPersistenceFilterWithASCTrue' while     setting bean property 'filterChainMap' with key [Root bean: class     [org.springframework.security.web.util.AnyRequestMatcher]; scope=; abstract=false;     lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false;        factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]     with key [0]; nested exception is     org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named      'securityContextPersistenceFilterWithASCTrue' is defined

这是我的弹簧配置;

<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 auto-config='true' use-expressions="true">
    <intercept-url pattern="/login" access="permitAll"/>
    <intercept-url pattern="/ajaxErrorPage" access="permitAll"/>
    <intercept-url pattern="/pages/*" access="hasRole('admin')" />
    <intercept-url pattern="/j_spring_security_check" access="permitAll"/>        
    <logout logout-success-url="/login.xhtml" />
    <form-login login-page="/login.xhtml"
                login-processing-url="/j_spring_security_check"                                                       
                default-target-url="/pages/index.xhtml"
                always-use-default-target="true"                                                        
                authentication-failure-url="/login.xhtml"/>
</http>


<!--Authentication Manager Details -->    
<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="customUserDetailsService">
        <!--            <password-encoder hash="md5"/>-->
    </authentication-provider>
</authentication-manager>


<beans:bean id="filterChainProxy" 
  class="org.springframework.security.web.FilterChainProxy">
<filter-chain-map>     
 <filter-chain pattern="/**" filters="
       securityContextPersistenceFilterWithASCTrue,
       formLoginFilter,
       exceptionTranslationFilter,
       filterSecurityInterceptor,
       customAjaxControlFilter" />
</filter-chain-map>
</beans:bean>


</beans:beans>
4

1 回答 1

0

使用命名空间配置 ( <http auto-config ...>) 时,过滤器链代理会根据您使用安全命名空间 (等) 配置的内容自动创建。

否则,如果您想显式定义过滤器链代理,则必须将命名空间配置放在一边,并配置每个 bean,如果您使用该命名空间配置,spring security 会自动为您创建。

在您的情况下,我想您可以删除“filterChainProxy”bean 配置,保留您为表单登录所做的配置。

于 2013-06-26T20:03:42.423 回答