使用JPA的Spring安全性。如何配置applicationContext-security.XML文件?(使用DaoAuthenticationProvider)

时间:2011-02-08 13:50:21

标签: java spring jpa spring-mvc spring-security

我正在使用JDBC身份验证服务来保护我的安全。 身份验证提供程序的代码是,

<authentication-provider>
    <jdbc-user-service id="userDetailsService" data-source-ref="dataSource" />
</authentication-provider>

对于数据源,

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
  <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
  <property name="url" value="jdbc:mysql://localhost:3306/demodata" /> 
  <property name="username" value="root"/> 
  <property name="password" value="root"/> 
</bean>

我也在使用 daoAuthenticationProvider ,代码就是,

<beans:bean id="daoAuthenticationProvider" class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
  <property name="userDetailsService" ref="userDetailsService"/>
  <property name="saltSource" ref bean="saltSource"/>
  <property name="passwordEncoder" ref="passwordEncoder"/>
</beans:bean>

它运作正常。 现在我想使用 JPA 连接而不是 JDBC 。 所以我创建了新的 CustomUserDetailsS​​ervice 实现UserDetailsS​​ervice 接口。现在我的身份验证提供程序看起来像,

<authentication-provider  user-service-ref="CustomUserDetailsService">
</authentication-provider>
<beans:bean id="CustomUserDetailsService" class="com.service.CustomUserDetailsService" />

身份验证管理器的代码:

<beans:bean id="authenticationManager"
        class="org.springframework.security.providers.ProviderManager">
        <beans:property name="providers"><beans:list>
                <beans:ref local="daoAuthenticationProvider" />
        </beans:list> </beans:property>
        <beans:property name="sessionController"
            ref="defaultConcurrentSessionController" />
</beans:bean>

问题在于,现在如何在 daoAuthenticationProvider的属性userDetailsS​​ervice 中提供引用? 先感谢您。 (如果需要,我可以提供更多信息)

2 个答案:

答案 0 :(得分:4)

???只需通过id:

引用新的UserDetailsS​​ervice
<beans:bean id="daoAuthenticationProvider"
  class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
  <property name="userDetailsService" ref="CustomUserDetailsService"/>
  <property name="saltSource" ref bean="saltSource"/>
  <property name="passwordEncoder" ref="passwordEncoder"/>
</beans:bean>

或者我错过了什么?

答案 1 :(得分:2)

而不是

<authentication-provider  user-service-ref="CustomUserDetailsService">
</authentication-provider>
<beans:bean id="CustomUserDetailsService" 
    class="com.service.CustomUserDetailsService" />

您可以按照建议here尝试以下内容吗?

<beans:bean id="CustomUserDetailsService" class="com.service.CustomUserDetailsService">
    <custom-authentication-provider/>
</beans>