当我添加filter-chain-proxy 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-config;
<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 :(得分:0)
使用命名空间配置(<http auto-config ...>
)时,将根据您使用安全命名空间(等)配置的内容自动创建过滤器链代理。
否则,如果要显式定义filter-chain-proxy,则必须将命名空间配置放在一边,并配置每个bean spring安全性会在您使用该命名空间配置时自动为您创建。
在你的情况下,我猜你可以删除“filterChainProxy”bean配置,保留你为表单登录所做的配置。