如何配置spring security以使用我自定义的UserDetailsManager?

时间:2013-10-16 19:07:55

标签: java spring spring-security

我正在使用spring security来管理项目中的用户登录/注册。我需要在三次登录尝试失败后实现用户锁定功能。我所做的是在数据库的“用户”表中添加另一个字段“account_non_locked”。

我面临的问题是Spring安全性不会更新新添加的列。我深入研究了源代码,发现在默认的UserDetailsManager中,sql语句写成:

"insert into users (username, password, enabled) values (?,?,?)"

解释了为什么它不能识别我的新专栏。

所以我复制该文件并将其更改为符合我自己的需要,即CustomUserDetailsManager.java

现在我无法配置spring security来使用我自己的自定义UserDetailsManager。配置文件现在是:

<authentication-manager alias="authenticationManager">
  <authentication-provider>
    <password-encoder ref="passwordEncoder" />
    <jdbc-user-service id="userDetailsService" data-source-ref="dataSource" />
  </authentication-provider>
</authentication-manager>
<beans:bean id="passwordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

我找不到任何可以正确配置的在线示例。请提前帮助和感谢!

1 个答案:

答案 0 :(得分:0)

3.2.4 Using other Authentication Providers部分介绍了如何使用authentication-provider@user-service-ref完成此操作。

您的示例如下所示:

<authentication-manager alias="authenticationManager">
  <authentication-provider user-service-ref="customUserDetailsManager">
    <password-encoder ref="passwordEncoder" />
  </authentication-provider>
</authentication-manager>

<beans:bean id="passwordEncoder" 
  class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

<beans:bean id="customUserDetailsManager"
  class="com.example.CustomUserDetailsManager">
  <!-- additional properties -->
</beans:bean>