Commit ab8e68d3a22012cae30fcfab90b6dece100ff918

Authored by YunaiV
1 parent d2dd2f10

fix:【system】优化 createOAuth2AccessToken 的 tenantId 逻辑,优先使用 OAuth2RefreshTokenDO

yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java
@@ -180,7 +180,13 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { @@ -180,7 +180,13 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
180 .setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes()) 180 .setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes())
181 .setRefreshToken(refreshTokenDO.getRefreshToken()) 181 .setRefreshToken(refreshTokenDO.getRefreshToken())
182 .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds())); 182 .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds()));
183 - accessTokenDO.setTenantId(TenantContextHolder.getTenantId()); // 手动设置租户编号,避免缓存到 Redis 的时候,无对应的租户编号 183 + // 优先从 refreshToken 获取租户编号,避免 ThreadLocal 被污染时导致 tenantId 为 null
  184 + // 可能关联的 issue:https://t.zsxq.com/JIi5G
  185 + Long tenantId = refreshTokenDO.getTenantId();
  186 + if (tenantId == null) {
  187 + tenantId = TenantContextHolder.getTenantId();
  188 + }
  189 + accessTokenDO.setTenantId(tenantId);
184 oauth2AccessTokenMapper.insert(accessTokenDO); 190 oauth2AccessTokenMapper.insert(accessTokenDO);
185 // 记录到 Redis 中 191 // 记录到 Redis 中
186 oauth2AccessTokenRedisDAO.set(accessTokenDO); 192 oauth2AccessTokenRedisDAO.set(accessTokenDO);