Commit ab8e68d3a22012cae30fcfab90b6dece100ff918
1 parent
d2dd2f10
fix:【system】优化 createOAuth2AccessToken 的 tenantId 逻辑,优先使用 OAuth2RefreshTokenDO
Showing
1 changed file
with
7 additions
and
1 deletions
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); |