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 创建实现 UserDetailsS​​ervice 的 TemporaryPasswordUserDetailsS​​ervice 并在覆盖的方法中找到 TemporaryPasswordRepository 中的用户:
 UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
    在 SecurityConfiguration 类的方法中添加实现的 UserDetailsS​​ervice:
protected void configure(AuthenticationManagerBuilder auth) 
  authenticationManagerBuilder
                .userDetailsService(your basic user datails service)
                .passwordEncoder(passwordEncoder());

   authenticationManagerBuilder
                .userDetailsService(TemporaryPasswordUserDetailsService)
                .passwordEncoder(passwordEncoder());

因为当至少一个 UserDatailsS​​ervice 与密码匹配时,spring 会授权用户,所以您现在可以使用 2 个密码登录。

注意:您还应该实现例如。 cron 将从数据库中删除过期密码。

【讨论】:

以上是关于Spring Security——通过密码和临时密码登录的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 设置登录的用户名和密码的三种方式

SpringCloud集成Security安全(Eureka注册中心)

我如何通过 Spring Security 创建 oauth 2 用户名密码流

总结关于spring security 使用 JWT 和 账户密码登录 整合在一起的新感悟

Spring security用户认证(设置用户名密码)

强制用户在 Spring Security 中更改过期密码