V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ShutTheFu2kUP
V2EX  ›  Java

shiro 的自定义 realm 中使用 mapper 的一个很奇怪的 BUG

  •  
  •   ShutTheFu2kUP · 2020-08-17 16:32:35 +08:00 · 1050 次点击
    这是一个创建于 1346 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单描述一下: service 中将新用户的数据插入 user 表,然后把 userId 丢给 shiro 进行登录,大部分用户都没问题,但是偶尔会出现有的用户在 realm 中通过 userId 去数据库查询出结果为 null 的情况,影响了后续逻辑。

    // 这个是 service 中登录的方法
    public void login(String userName, String password) {
        // 新增用户
        User user = new User();
        user.setUserName(userName);
        user.setPassword(password);
        
        Integer userId = userMapper.insert(user);
    
        // shiro 登录(使用自定义 token)
        UserToken userToken = userToken(userId);
        
        SecurityUtil.getSubject.login(userToken);
        
        // 继续以下逻辑...
    }
    
    // 这个是自定义 realm 中进行登录的方法,上面 SecurityUtil.getSubject.login(userToken)之后就是跑到这里面来
    public class AuthRealm extends AuthorizingRealm {
        
        private AuthenticationInfo getUserAuthInfo(UserToken token) throws AuthenticationException{
            Integer userId = token.getUserId();
            User user = userMapper.selectById(userId);
            
            if(user == null) {
                // 此处就是 BUG 点,大部分用户正常,偶尔出现一个用户查询出来的 user 为 null,且打印日志传进来 token 中的 userId 有值,查数据库也有对应数据
                LOGGER.error("找不到用户账号:{}", token.getUserId());
                throw new UnknownAccountException();//没找到帐号
            } else {
                AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(userId.toString(), userId.toString(), this.getName());
                return authcInfo;
            }
        }
        
    }
    

    不要问我为什么还要在 realm 里面查一遍,这段代码不是我写的,但是就是对这个 BUG 感到很疑惑,希望有大佬能够解答。

    ShutTheFu2kUP
        1
    ShutTheFu2kUP  
    OP
       2020-08-17 16:39:14 +08:00
    好吧,没问题了,只是主从库导致的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1039 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.