Skip to content

判断用户是否存在bug #9

Description

@chanris

org/opengoofy/index12306/biz/userservice/service/impl/UserLoginServiceImpl.java
代码片段

    @Override
    public Boolean hasUsername(String username) {
        boolean hasUsername = userRegisterCachePenetrationBloomFilter.contains(username);
        if (hasUsername) {
            StringRedisTemplate instance = (StringRedisTemplate) distributedCache.getInstance();
            return instance.opsForSet().isMember(USER_REGISTER_REUSE_SHARDING + hashShardingIdx(username), username);
        }
        return true;
    }
  1. 当bloomFilter判断username为false,username一定不存在,则应该返回false;
  2. 并且,hasUsername为true时,应返回 !instance.opsForSet().isMember(USER_REGISTER_REUSE_SHARDING + hashShardingIdx(username), username);,表示username已复用;
  3. 此外,还有一种情况没有考虑,username不存在,但bloomFilter误判为true,此时isMember() 为 false,按 2. 的 逻辑为 true,实际应为 false;
    故感觉逻辑不正确,若我理解错误,请多指教。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions