SpringSecurity 用户帐号已被锁定

本是古典 何须时尚 2024-02-17 13:02 153阅读 0赞

SpringSecurity 用户帐号已被锁定

01 异常发生场景

  • 当我自定义登录接口时
  • 以下是我的UserDetailsService和UserDetails接口的实现类

    @Service
    public class UserDetailsServiceImpl implements UserDetailsService {

    1. @Autowired
    2. private MsUserServiceImp msUserServiceImp;
    3. @Override
    4. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  1. //使用mybatis-plus,获取到账号密码数据
  2. LambdaQueryWrapper<MsUser> qw=new LambdaQueryWrapper<>();
  3. qw.eq(MsUser::getUsername,username);
  4. MsUser user = msUserServiceImp.getOne(qw);
  5. LoginUser loginUser = new LoginUser();
  6. loginUser.setMsUser(user);
  7. return loginUser;
  8. }
  9. }
  10. @Data
  11. @NoArgsConstructor
  12. @AllArgsConstructor
  13. public class LoginUser implements UserDetails {
  14. private MsUser msUser;
  15. @Override
  16. public Collection<? extends GrantedAuthority> getAuthorities() {
  17. return null;
  18. }
  19. @Override
  20. public String getPassword() {
  21. return msUser.getPassword();
  22. }
  23. @Override
  24. public String getUsername() {
  25. return msUser.getUsername();
  26. }
  27. @Override
  28. public boolean isAccountNonExpired() {
  29. return false;
  30. }
  31. @Override
  32. public boolean isAccountNonLocked() {
  33. return false;
  34. }
  35. @Override
  36. public boolean isCredentialsNonExpired() {
  37. return false;
  38. }
  39. @Override
  40. public boolean isEnabled() {
  41. return false;
  42. }
  43. }

在这里插入图片描述

02 问题发生的原因

  • 重写的UserDetails类默认方法返回值为false

1.isAccountNonExpired()

  • 判断帐户是否过期

2.isAccountNonLocked()

  • 判断帐户是否锁定

3.isCredentialsNonExpired()

  • 凭据是否过期,就是登录时间到没到

4.isEnabled()

  • 是否启动

03 解决方式

  • 将UserDetails接口的实现类里上述方法,也就是所有方法设置为true就可以避免被锁定了

发表评论

表情:
评论列表 (有 0 条评论,153人围观)

还没有评论,来说两句吧...

相关阅读