Spring Security——通过密码和临时密码登录
Posted
技术标签:
【中文标题】Spring Security——通过密码和临时密码登录【英文标题】:Spring security - login by password and temporary password 【发布时间】:2021-12-07 23:00:15 【问题描述】:我正在尝试在 Spring 2.5 Boot 中对我的服务实施自定义身份验证。
现在我有一个使用 UsernamePasswordAuthenticationFilter 的典型 Spring Security 登录。
我需要实现/覆盖什么才能使用两个密码登录帐户?我的意思是主密码和临时密码-分配给用户以防忘记(通过邮件发送)?
注意:临时密码有有效期
【问题讨论】:
@Toerktumlare 这些是业务需求。我已经使用 spring security 实现了这一点。我会在空闲时间发布我的解决方案 【参考方案1】:我使用 Spring Security 实现了这一点。
你所要做的就是:
-
实施 UserDetails,您将在其中获得密码、到期日期和其他信息,如用户 ID 或电子邮件(您可以在此处存储项目所需的信息)
使用临时密码、到期日期和用户 ID 创建表
添加在用户请求时为帐户分配临时密码的功能。
创建接口 TemporaryPasswordRepository
创建实现 UserDetailsService 的 TemporaryPasswordUserDetailsService 并在覆盖的方法中找到 TemporaryPasswordRepository 中的用户:
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
-
在 SecurityConfiguration 类的方法中添加实现的 UserDetailsService:
protected void configure(AuthenticationManagerBuilder auth)
authenticationManagerBuilder
.userDetailsService(your basic user datails service)
.passwordEncoder(passwordEncoder());
authenticationManagerBuilder
.userDetailsService(TemporaryPasswordUserDetailsService)
.passwordEncoder(passwordEncoder());
因为当至少一个 UserDatailsService 与密码匹配时,spring 会授权用户,所以您现在可以使用 2 个密码登录。
注意:您还应该实现例如。 cron 将从数据库中删除过期密码。
【讨论】:
以上是关于Spring Security——通过密码和临时密码登录的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 设置登录的用户名和密码的三种方式
SpringCloud集成Security安全(Eureka注册中心)
我如何通过 Spring Security 创建 oauth 2 用户名密码流