2012-03-11 69 views
4

我只是切換到春季安全3.1,因爲我面臨這個問題「Different Login pages for mobile and desktop while using Spring Security錯誤創建與bean名稱「org.springframework.security.filterChains」

所以我得到了一個解決方案切換到春天安全3.1現在我在運行應用程序時遇到此新的異常

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#4' while setting bean property 'sourceList' with key [4]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.DefaultSecurityFilterChain#4': Cannot create inner bean '(inner bean)' of type [org.springframework.security.web.authentication.logout.LogoutFilter] while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#6': Cannot resolve reference to bean 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices#0': Cannot create inner bean '(inner bean)' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#7': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanInitializationException: Property 'sessionFactory' is required for bean '(inner bean)#7' 

我的applicationContext看起來像這樣

<?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:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" 
default-lazy-init="true"> 

<!-- Activates scanning of @Autowired --> 
<context:annotation-config /> 

<!-- Activates scanning of @Repository --> 
<context:component-scan base-package="com.example.dao"/> 
<context:component-scan base-package="com.example.dao.user"/> 
<context:component-scan base-package="com.example.model"/> 
<context:component-scan base-package="com.example.controller"/> 
<context:component-scan base-package="com.example.service"/> 
<context:component-scan base-package="com.example.service.impl"/> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value>/WEB-INF/hibernate.cfg.xml</value> 
    </property> 

</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

和我的applicationContext-security.xml文件看起來像

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:security="http://www.springframework.org/schema/security" 
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.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 
     <security:http pattern="/images/**" security="none"/> 
     <security:http pattern="/Stylesheets/**" security="none"/> 
     <security:http pattern="/JavaScript/**" security="none"/> 
     <security:http pattern="/scripts/**" security="none"/> 

<security:http auto-config="true"> 
    <security:intercept-url pattern="/passwordHint*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_ADMIN,ROLE_USER"/> 
    <security:intercept-url pattern="/signup*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="/login.htm" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="/home.htm" access="ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="/changepwd.htm" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="/pwd.htm*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN" /> 
    <security:intercept-url pattern="/favicon.ico" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/> 
    <security:form-login login-page="/login.htm" authentication-success-handler-ref="customHandler" 
     authentication-failure-url="/login.htm?error=true" default-target-url="/home.htm" 
     login-processing-url="/j_security_check" /> 
    <security:remember-me user-service-ref="userDAO" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/> 
</security:http>  

<security:http auto-config="true"> 

    <security:intercept-url pattern="mobile/passwordHint*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_ADMIN,ROLE_USER"/> 
    <security:intercept-url pattern="mobile/signup*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="mobile/login.htm" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="mobile/home.htm" access="ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="mobile/changepwd.htm" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN"/> 
    <security:intercept-url pattern="mobile/pwd.htm*" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER,ROLE_ADMIN" /> 
    <security:intercept-url pattern="mobile/favicon.ico" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <security:intercept-url pattern="mobile/**" access="ROLE_USER,ROLE_ADMIN"/> 
    <security:form-login login-page="/mlogin.htm" authentication-success-handler-ref="customHandler" 
     authentication-failure-url="/mlogin.htm?error=true" default-target-url="/mhome.htm" 
     login-processing-url="/j_spring_security_check" /> 
    <security:remember-me user-service-ref="userDAO" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/> 
</security:http> 

<bean id="customHandler" class="com.example.auth.AuthenticationHandler"> 
</bean> 

<security:authentication-manager> 
    <security:authentication-provider user-service-ref="userDAO"> 
     <!-- 
     TODO skipped to allow password emailing instead of password change and security 
     TODO question hell.. 
     --> 
     <!-- <password-encoder ref="passwordEncoder"/> --> 
    </security:authentication-provider> 
</security:authentication-manager> 

</beans> 

有什麼不對這些配置?

+0

你能否提供「userDAO」bean定義? – vacuum 2012-03-26 20:31:22

+0

它似乎確實是userDAO定義的根本原因。該定義中的某些東西需要一個'sessionFactory'屬性,但沒有得到它。 – yincrash 2012-04-22 23:59:02

+0

您是否找到解決方案?我得到與DefaultSecurityFilterChain相同的BeanCreationException – Stefan 2013-06-02 10:24:48

回答

0

你能給出完整的異常堆棧跟蹤嗎?我不認爲你可以有兩個

<security:http auto-config="true"/> 

在相同的春季安全配置與所有的攔截url設置。如果您需要兩個單獨的登錄頁面在登錄請求中具有屬性,或使用「userAgent」並在控制器中進行切換。

相關問題