2012-08-27 49 views
0

后应用程序将无法启动我有一个使用自定义的认证网络升级从3.0.2到3.1.2

<global-method-security pre-post-annotations="disabled"> 

</global-method-security> 

<http use-expressions="true"> 

    <intercept-url pattern="/diagnostics/**" access="hasRole('ROLE_USER')" /> 


    <form-login login-page="/genesis" default-target-url="/diagnostics/start-diagnostics" 
     authentication-failure-url="/genesis?authfailed=true" 
     authentication-success-handler-ref="customTargetUrlResolver"/> 
     <access-denied-handler error-page="/genesis?notauthorized=true"/> 

    <logout logout-success-url="/genesis"/> 
    <session-management session-authentication-error-url="/genesis"> 
     <concurrency-control max-sessions="1" expired-url="/genesis?sessionExpired=true"/> 
    </session-management> 
</http> 

<authentication-manager> 
<authentication-provider ref="genesisAuthenticator"> 
    <jdbc-user-service data-source-ref="dataSource"/> 
</authentication-provider> 
</authentication-manager> 

<beans:bean id="genesisAuthenticator" class="com.blackbox.x.web.security.Authenticator"/> 
<beans:bean id="customTargetUrlResolver" class="com.blackbox.x.web.security.StartPageRouter"/> 

</beans:beans> 

升级到3.1.2后一个工作3.0.2的applicationContext-security.xml文件我应用程序不会启动,并且我收到错误消息

“配置问题:authentication-provider元素在与'ref'属性一起使用时不能有子元素。我假设问题在于

<jdbc-user-service data-source-ref="dataSource"/> 

元素其中data-source-ref指向我的application-context.xml文件中的定义。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
<property name="url" value="jdbc:mysql://localhost:3306/genesis"/> 
<property name="username" value="dbuser"/> 
<property name="password" value="********"/> 

什么我需要做的就是这个工作。回落到3.0.2并不是真正的选择。

回答

0

如果您使用自定义的AuthenticationProvider实现,你必须配置它在“传统”春路XML,因为<security:authentication-provider ref="yourImpl">只是点到豆可以在认证任何任何方式,并没有真正必须完全使用UserDetailsService。在你的例子中,你试图使用jdbc-user-service这只是创建JdbcDaoImpl bean的快捷方式。

所以你要做的是确保所有的genesisAuthenticator依赖关系都是你自己解决的,而不是Spring Security。也就是说,您应该将@Autowired setUserDetailsService(UserDetailsService userDetailsService)方法添加到您的bean中,或者像这样使用XML配置它(使用id属性):

<beans:bean id="genesisAuthenticator" 
    class="com.blackbox.x.web.security.Authenticator"> 
    <property name="userDetailsService" ref="jdbcUserService"/>  
</beans:bean> 

<jdbc-user-service id="jdbcUserService" data-source-ref="dataSource" />