거래 스레드의 토큰 발급을 이력에 TRANSACTION 으로 구분
토큰이 없거나 만료되어 거래 중 발급한 경우도 SCHEDULE 로 기록되던 문제 수정
This commit is contained in:
@@ -258,7 +258,7 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
if (cached == null) {
|
||||
logger.debug("Token not exists for adapter group: {}", adapterGroupName);
|
||||
sessionManager.getOutboundAccessToken(adapterGroupName,
|
||||
token -> issueToken(credential));
|
||||
token -> issueToken(credential, TokenIssueHistory.TRIGGER_SCHEDULE));
|
||||
|
||||
} else if (cached.getExpiration() == null) {
|
||||
// 만료시각이 없는 토큰은 갱신 시점을 판단할 수 없다.
|
||||
@@ -272,7 +272,7 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
logger.debug("Token expires before next schedule : {}, expiration date: {}",
|
||||
adapterGroupName, cached.getExpiration());
|
||||
sessionManager.reissueOutboundAccessToken(adapterGroupName, cached.getAccessToken(),
|
||||
intervalTime, token -> issueToken(credential));
|
||||
intervalTime, token -> issueToken(credential, TokenIssueHistory.TRIGGER_SCHEDULE));
|
||||
|
||||
} else {
|
||||
logger.debug(
|
||||
@@ -300,7 +300,10 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
}
|
||||
}
|
||||
|
||||
private AccessTokenVO issueToken(OutboundOAuthCredentialVo outboundOAuthCredentialVo) {
|
||||
/**
|
||||
* @param trigger 발급 이력에 남길 호출 경로 (TokenIssueHistory.TRIGGER_*)
|
||||
*/
|
||||
private AccessTokenVO issueToken(OutboundOAuthCredentialVo outboundOAuthCredentialVo, String trigger) {
|
||||
String adapterGroupName = outboundOAuthCredentialVo.getAdapterGroupName();
|
||||
AccessTokenVO accessToken = null;
|
||||
try {
|
||||
@@ -335,12 +338,12 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
accessToken = (AccessTokenVO) service.execute(adapterGroupName, properties,
|
||||
outboundOAuthCredentialVo);
|
||||
} catch (Exception e) {
|
||||
recordIssueHistory(adapterGroupName, TokenIssueHistory.TRIGGER_SCHEDULE, type, startTime, null,
|
||||
recordIssueHistory(adapterGroupName, trigger, type, startTime, null,
|
||||
toFailReason(e));
|
||||
throw e;
|
||||
}
|
||||
|
||||
recordIssueHistory(adapterGroupName, TokenIssueHistory.TRIGGER_SCHEDULE, type, startTime,
|
||||
recordIssueHistory(adapterGroupName, trigger, type, startTime,
|
||||
accessToken, null);
|
||||
|
||||
// 발급에 실패했는데도 빈 토큰을 반환하는 구현체가 있다. 그대로 캐시되면
|
||||
@@ -354,12 +357,12 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
return accessToken;
|
||||
|
||||
} else {
|
||||
recordIssueHistory(adapterGroupName, TokenIssueHistory.TRIGGER_SCHEDULE, type,
|
||||
recordIssueHistory(adapterGroupName, trigger, type,
|
||||
System.currentTimeMillis(), null, "토큰 발급 구현체를 찾을 수 없음");
|
||||
logger.warn("Token service not found for type: {} and adapter group: {}", type, adapterGroupName);
|
||||
}
|
||||
} else {
|
||||
recordIssueHistory(adapterGroupName, TokenIssueHistory.TRIGGER_SCHEDULE, null,
|
||||
recordIssueHistory(adapterGroupName, trigger, null,
|
||||
System.currentTimeMillis(), null, "어댑터 설정을 찾을 수 없음");
|
||||
logger.warn("No valid adapter configuration found for adapter group: {}", adapterGroupName);
|
||||
}
|
||||
@@ -429,7 +432,7 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
* 3. 주의사항 : accessToken 은 앞 UNMASKED_TOKEN_LENGTH 자만 남겨 보관한다.
|
||||
*
|
||||
* @param adapterGroupName 어댑터그룹명
|
||||
* @param trigger SCHEDULE / RETRY
|
||||
* @param trigger SCHEDULE / RETRY / TRANSACTION
|
||||
* @param serviceClass 사용한 발급 구현체 클래스명
|
||||
* @param startTime 발급 시도 시각
|
||||
* @param accessToken 발급된 토큰. 실패 시 null.
|
||||
@@ -553,7 +556,8 @@ public class AccessTokenManagerByDB implements Lifecycle {
|
||||
OutboundOAuthCredentialVo outboundOAuthCredentialVo = outboundOAuthCredentialVos
|
||||
.get(adapterGroupName);
|
||||
|
||||
return issueToken(outboundOAuthCredentialVo);
|
||||
// 스케줄러가 아니라 거래 스레드가 토큰이 없거나 만료된 것을 보고 발급하는 경로다.
|
||||
return issueToken(outboundOAuthCredentialVo, TokenIssueHistory.TRIGGER_TRANSACTION);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -17,15 +17,18 @@ public class TokenIssueHistory {
|
||||
/** 스케줄러의 주기 발급 */
|
||||
public static final String TRIGGER_SCHEDULE = "SCHEDULE";
|
||||
|
||||
/** 거래 중 재발급 */
|
||||
/** 거래 중 재발급 (기관이 토큰을 거부한 경우) */
|
||||
public static final String TRIGGER_RETRY = "RETRY";
|
||||
|
||||
/** 거래 중 발급 (캐시에 토큰이 없거나 이미 만료된 경우) */
|
||||
public static final String TRIGGER_TRANSACTION = "TRANSACTION";
|
||||
|
||||
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/** 발급을 시도한 시각 */
|
||||
private final String issuedAt;
|
||||
|
||||
/** SCHEDULE | RETRY */
|
||||
/** SCHEDULE | RETRY | TRANSACTION */
|
||||
private final String trigger;
|
||||
|
||||
/** 사용한 발급 구현체 클래스명 */
|
||||
|
||||
Reference in New Issue
Block a user