2013-06-25 63 views
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 

这是我的Spring配置;

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

回答

0

当使用命名空间配置(<http auto-config ...>),根据您的安全命名空间(等)配置的内容会自动创建过滤器链代理。否则,如果要显式定义filter-chain-proxy,则必须将名称空间配置放在一边,并配置每个bean spring安全性将自动为您创建(如果使用该命名空间配置)。

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