具有 Spring 安全性的现有和不存在用户的时不变查询

Time-invariant query for existing & non-existing user with Spring Security

在我的身份验证服务中,我尝试使用一个简单的 StringRedisTemplate 对象从我的 Redis 中获取密码。
然后,我使用BCryptPasswordEncoder进行密码匹配。
我认为用户名不匹配和密码不匹配之间存在时间差。
我读过一些文章说用户名不是秘密值,我不必担心 - 我知道这一点,但就我而言,我希望两种情况之间没有时间差。
我该怎么做?

@PostMapping(value = "/auth", consumes = "application/json")
public ResponseEntity<?> isClientExists(@Valid @RequestBody User user) {
    //with redisTemplate.opsForValue().get(sha256Hex(userName)) :
    UserDetails user = redisClient.loadUserByUserName(user.getUserName()); 

    if (userNotFound(userFromDB)) {
        /* What should I add here to make it time-invariant query? */
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
    }
    if (!authenticateUser(user.getPassword(), userFromDB.getPassword())) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
    }

    return ResponseEntity.status(HttpStatus.OK).build();
}

private boolean userNotFound(UserDetails userFromDB) {
    return (userFromDB == null);
}

private boolean authenticateUser(String userPassword, String userFromDBPassword) {
    //with BCryptPasswordEncoder :
    return passwordEncoder.matches(userPassword, userFromDBPassword);
}

两种方法:

1) 算出 authenticateUser 调用平均需要多长时间并休眠这么长时间(尽管将来 CPU 升级时时间可能会改变)。

2) 只需使用随机数据再次调用 authenticateUser 并忽略结果。