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

标签 java spring spring-security

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

我面临的问题是 spring security 不会更新新添加的列。深挖源码发现在默认的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" />

我在网上找不到任何可以正确配置的示例。请帮助并提前致谢!

最佳答案

本节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>

关于java - 如何配置 spring security 以使用我自定义的 UserDetailsManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411722/

相关文章:

java - Spring security REST 不处理登录请求(404)

java - 输入整数时,整数不会保存在 SQL 中

java - MongoDB 和 Spring

java - 如何清除permgen内存空间

java - 如何从 MongoRepository/QueryDSL 获取不同的字段?

java - 当@ActiveProfiles ("test"时,如何忽略特定方法的 spring @Transactional 注释)

spring - Grails 3 与并发 session

java - Spring Security 3.0.3 及自定义认证处理过滤器

javascript - JSONSerializer 呈现 Java 字符串数组

java - jarsigner:签名者的证书链未经验证