From 76a74cd3a17cb46b7e889f45767680d7932215c1 Mon Sep 17 00:00:00 2001 From: curry772 Date: Fri, 11 Sep 2026 10:14:12 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=88=20=EC=95=84=EC=9B=83=EB=B0=94?= =?UTF-8?q?=EC=9A=B4=EB=93=9C=20OAuth=20=ED=86=A0=ED=81=B0=EC=9D=B4=20?= =?UTF-8?q?=EC=BA=90=EC=8B=9C=EC=97=90=20=EA=B3=A0=EC=B0=A9=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 발급 실패를 삼키고 빈 토큰을 반환하는 구현체가 있어 그 토큰이 그대로 캐시되던 문제 - 빈 토큰은 expiration 이 없어 isExpired() 가 항상 false 라 재기동 전까지 재발급되지 않음 - SessionManagerForIgnite : 빈 토큰은 캐시하지 않고 warn 후 다음 주기에 재시도 - AccessTokenManagerByDB : 발급 결과가 비어 있으면 실패로 처리하고 null 반환 --- .../common/authoutbound/AccessTokenManagerByDB.java | 10 +++++++++- .../eai/common/session/SessionManagerForIgnite.java | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eactive/eai/common/authoutbound/AccessTokenManagerByDB.java b/src/main/java/com/eactive/eai/common/authoutbound/AccessTokenManagerByDB.java index e602393..af6a344 100644 --- a/src/main/java/com/eactive/eai/common/authoutbound/AccessTokenManagerByDB.java +++ b/src/main/java/com/eactive/eai/common/authoutbound/AccessTokenManagerByDB.java @@ -316,9 +316,17 @@ public class AccessTokenManagerByDB implements Lifecycle { if(service != null) { logger.debug("Executing token service of type: {} for adapter group: {}", type, adapterGroupName); accessToken = (AccessTokenVO) service.execute(adapterGroupName, properties, outboundOAuthCredentialVo); + + // 발급에 실패했는데도 빈 토큰을 반환하는 구현체가 있다. 그대로 캐시되면 + // 만료시각이 없어 재발급 대상이 되지 않으므로 실패로 처리한다. + if (accessToken == null || StringUtils.isBlank(accessToken.getAccessToken())) { + logger.error("Issued token is empty. type: {}, adapter group: {}", type, adapterGroupName); + return null; + } + logger.info("New token issued successfully for adapter group: {}", adapterGroupName); return accessToken; - + } else { logger.warn("Token service not found for type: {} and adapter group: {}", type, adapterGroupName); } diff --git a/src/main/java/com/eactive/eai/common/session/SessionManagerForIgnite.java b/src/main/java/com/eactive/eai/common/session/SessionManagerForIgnite.java index 2411524..352f34c 100644 --- a/src/main/java/com/eactive/eai/common/session/SessionManagerForIgnite.java +++ b/src/main/java/com/eactive/eai/common/session/SessionManagerForIgnite.java @@ -938,7 +938,13 @@ public class SessionManagerForIgnite extends SessionManager { logger.debug(String.format("getting token is null or expired borrow new token =%s", token)); - cacheOutBoundAccessToken.put(key, token); + // 빈 토큰은 캐시하지 않는다. 발급 구현체가 실패를 삼키고 빈 토큰을 반환하는 경우가 있는데, + // 그게 캐시되면 만료시각이 없어 isExpired() 가 계속 false 라 재발급되지 않는다. + if (token != null && token.getAccessToken() != null && token.getAccessToken().trim().length() > 0) { + cacheOutBoundAccessToken.put(key, token); + } else { + logger.warn("Empty access token is not cached. key=" + key); + } } } else