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