gpt4 book ai didi

java - 为过期和锁定的用户创建自定义消息

转载 作者:行者123 更新时间:2023-12-02 19:26:15 24 4
gpt4 key购买 nike

如果用户在身份验证过程中被锁定或过期,我想返回自定义消息。我尝试实现这个:

@Service
public class UserDetailsHandler implements UserDetailsService {

@Autowired
private UsersService usersService;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
final Optional<Users> user = usersService.findByLogin(username);

if (!user.isPresent()) {
throw new UsernameNotFoundException("User '" + username + "' not found");
}

return user
.map(value -> {
return new User(
value.getLogin(),
value.getEncryptedPassword(),
value.getEnabled(),
hasAccountExpired(value.getExpiredAt()),
hasPasswordExpired(value.getPasswordChangedAt()),
hasAccountLocked(value.getLockedAt()),
Collections.singleton(new SimpleGrantedAuthority(value.getRole().getAuthority()))
);
}).orElseThrow(() -> new UsernameNotFoundException("User with username " + username + " not found"));
}

private boolean hasAccountExpired(LocalDateTime account_expired_at) {

return account_expired_at == null;
}

完整代码:GitHub

问题是,如果验证返回状态用户锁定用户过期的真值,如何创建返回一些自定义消息的处理程序?

最佳答案

最适合您的选择是:

  1. 在您的实体 Users 中实现 Spring UserDetails
  2. 使用 Spring AccountStatusUserDetailsChecker 类检查 loadUserByUsername 用户是否已被锁定等。
  3. 将管理这些异常所需的方法添加到 EngineExceptionHandler 中:LockedExceptionAccountExpiredException

您将在以下链接中看到上述要点的示例:

Point 1

Point 2

Points 2-3

关于java - 为过期和锁定的用户创建自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62366374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com