跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • shiro 的自定义 realm 中使用 mapper 的一个很奇怪的 BUG
未分類
31 8 月 2020

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

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

資深大佬 : ShutTheFu2kUP 20

简单描述一下: 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 感到很疑惑,希望有大佬能够解答。

大佬有話說 (1)

  • 主 資深大佬 : ShutTheFu2kUP

    好吧,没问题了,只是主从库导致的。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具