From 22a2a0fd2268cdc2635dfcda5c407756a799316b Mon Sep 17 00:00:00 2001 From: pksup Date: Thu, 18 Dec 2025 15:56:31 +0900 Subject: [PATCH 01/13] =?UTF-8?q?error=20message=20format=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20-=20OAuth2=20RFC=206749?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kjb/errors/EAPIM_ErrorResponse_WorkHistory.md | 6 +++--- .../eai/kjb/errors/EAPIM_ExceptionHandler_Test.md | 2 +- .../eai/kjb/errors/ErrorResponseValidator.java | 13 ++++--------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ErrorResponse_WorkHistory.md b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ErrorResponse_WorkHistory.md index 0a31f5f..e55730c 100644 --- a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ErrorResponse_WorkHistory.md +++ b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ErrorResponse_WorkHistory.md @@ -5,7 +5,7 @@ ### 목표 모든 HTTP 에러 응답을 다음과 같은 표준 JSON 포맷으로 통일: ```json -{"error":{"code":"에러코드","message":"에러메시지"}} +{"error":"에러코드","error_description":"에러메시지"} ``` ## 변경 내역 @@ -15,7 +15,7 @@ - 표준 에러 응답 포맷 정의 ```java - public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"error\":{\"code\":\"%s\",\"message\":\"%s\"}}"; + public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"error\":\"%s\",\"error_description\":\"%s\"}"; ``` - 에러 코드 상수 추가 @@ -197,7 +197,7 @@ out.println(jsonErrorMessage); **검증 항목**: - HTTP 상태 코드 정확성 -- 응답 포맷이 `{"error":{"code":"...","message":"..."}}` 형식인지 확인 +- 응답 포맷이 `{"error":"...","error_description":"..."}` 형식인지 확인 - 에러 코드가 적절히 매핑되는지 확인 ## 에러 코드 매핑 diff --git a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ExceptionHandler_Test.md b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ExceptionHandler_Test.md index d0e7546..3d1cb0e 100644 --- a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ExceptionHandler_Test.md +++ b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/EAPIM_ExceptionHandler_Test.md @@ -5,7 +5,7 @@ **에러 응답 포맷**: ```json -{"error":{"code":"에러코드","message":"에러메시지"}} +{"error":"에러코드","error_description":"에러메시지"} ``` ## 테스트 케이스 diff --git a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/ErrorResponseValidator.java b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/ErrorResponseValidator.java index e249dbe..032ea78 100644 --- a/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/ErrorResponseValidator.java +++ b/kjb-errors/src/test/java/com/eactive/eai/kjb/errors/ErrorResponseValidator.java @@ -8,7 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; /** * MessageUtil.makeJsonErrorMessage 기본 포맷 검증 유틸리티 - * 기본 포맷: { "error" : {"code":"%s","message":"%s"} } + * 기본 포맷: {"error":"에러코드","error_description":"에러메시지"} */ public class ErrorResponseValidator { @@ -24,15 +24,10 @@ public class ErrorResponseValidator { assertNotNull(jsonNode, "JSON 응답이 null입니다"); assertTrue(jsonNode.has("error"), "error 필드가 존재해야 합니다"); + assertTrue(jsonNode.has("error_description"), "error_description 필드가 존재해야 합니다"); - JsonNode errorNode = jsonNode.get("error"); - assertNotNull(errorNode, "error 객체가 null입니다"); - - assertTrue(errorNode.has("code"), "error.code 필드가 존재해야 합니다"); - assertTrue(errorNode.has("message"), "error.message 필드가 존재해야 합니다"); - - assertNotNull(errorNode.get("code").asText(), "error.code 값이 null입니다"); - assertNotNull(errorNode.get("message").asText(), "error.message 값이 null입니다"); + assertNotNull(jsonNode.get("error").asText(), "error 값이 null입니다"); + assertNotNull(jsonNode.get("error_description").asText(), "error_description 값이 null입니다"); // 검증 성공 시 Pretty Print String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode); From 0b23fa8d002ab8d4e116d28f261f2d5079dfc71b Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Sun, 21 Dec 2025 17:53:51 +0900 Subject: [PATCH 02/13] =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/eactive/eai/custom/{ => kjb}/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java (100%) diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java similarity index 100% rename from src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java rename to src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java From 038b82181a17b952855eb213e9e4340c3817ee47 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Sun, 21 Dec 2025 17:55:01 +0900 Subject: [PATCH 03/13] =?UTF-8?q?Outbound=20Adapter=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=A0=20Inbound=EC=9D=98=20Token=EA=B0=92?= =?UTF-8?q?=20=EC=A0=84=EB=8B=AC(=EC=88=98=EC=A0=95).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/eai/adapter/service/ApiAdapterService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java b/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java index 6ce7b1b..b4a9318 100644 --- a/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java +++ b/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java @@ -115,8 +115,13 @@ public class ApiAdapterService extends HttpAdapterServiceSupport { transactionProp.put(HEADER_NAME_CLIENT_ID, getHeaders(request).get(HEADER_NAME_CLIENT_ID)); } transactionProp.put(ENCRYPT_BASE_TYPE, httpProp.getProperty(ENCRYPT_BASE_TYPE, "")); //jwhong - //transactionProp.put(INBOUND_TOKEN, getHeaders(request).get(INBOUND_TOKEN)); // jwhong - transactionProp.put(INBOUND_TOKEN, getHeaders(request).get(INBOUND_TOKEN) != null ? getHeaders(request).get(INBOUND_TOKEN) : ""); //jwhong , null 이면 default로 "" put +// //transactionProp.put(INBOUND_TOKEN, getHeaders(request).get(INBOUND_TOKEN)); // jwhong +// transactionProp.put(INBOUND_TOKEN, getHeaders(request).get(INBOUND_TOKEN) != null ? getHeaders(request).get(INBOUND_TOKEN) : ""); //jwhong , null 이면 default로 "" put + String inboundToken = getHeaders(request).getOrDefault(INBOUND_TOKEN, "").toString(); + if (StringUtils.isNotBlank(inboundToken) && StringUtils.startsWith(inboundToken, "Bearer ")) { + inboundToken = inboundToken.substring(7); + } + transactionProp.put(INBOUND_TOKEN, inboundToken); transactionProp.put(ENCRYPT_AES256_IV, httpProp.getProperty(ENCRYPT_AES256_IV, "")); //jwhong transactionProp.put(ENCRYPT_AES256_KEY, httpProp.getProperty(ENCRYPT_AES256_KEY, "")); //jwhong From d1bdb54dcf5a9e11f280c0971cd32a4661452807 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Sun, 21 Dec 2025 17:59:26 +0900 Subject: [PATCH 04/13] =?UTF-8?q?Outbound=20Adapter=EC=9A=A9=20Filter?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20KJB?= =?UTF-8?q?=EC=9A=A9=20Filter=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HttpClient5AdapterFilterFactory.java | 103 ++++++++ .../filter/HttpClient5AdapterFilterType.java | 23 ++ .../filter/HttpClientAdapterBaseFilter.java | 62 +++++ .../HttpClientAdapterExceptionFilter.java | 10 + .../filter/HttpClientAdapterFilter.java | 12 + .../HttpClientAdapterFilterException.java | 35 +++ .../http/client/filter/JBOBPFilter.java | 127 ++++++++++ .../http/client/filter/KAKAOBankFilter.java | 98 ++++++++ .../http/client/filter/KFTCFaceFilter.java | 124 ++++++++++ .../http/client/filter/KFTCP2PFilter.java | 77 ++++++ .../http/client/filter/NAVERFinFilter.java | 70 ++++++ .../http/client/filter/NICECreditFilter.java | 108 +++++++++ .../client/filter/SimpleFrameworkFilter.java | 60 +++++ .../http/client/filter/TOSSBankFilter.java | 64 +++++ ...ttpClient5AdapterServiceRestAddFilter.java | 221 ++++++++++++++++++ 15 files changed, 1194 insertions(+) create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java new file mode 100644 index 0000000..db42f8d --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java @@ -0,0 +1,103 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.concurrent.ConcurrentHashMap; + +import com.eactive.eai.common.util.Logger; + +public class HttpClient5AdapterFilterFactory { + static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + static String basePackage = "com.eactive.eai.custom.kjb.adapter.http.client.filter"; + private static ConcurrentHashMap h = new ConcurrentHashMap<>(); + private static ConcurrentHashMap eh = new ConcurrentHashMap<>(); + + private HttpClient5AdapterFilterFactory() { + throw new IllegalStateException("Utility class"); + } + + public static HttpClientAdapterFilter createFilter(String type) { + if (h.containsKey(type)) { + return h.get(type); + } + + HttpClientAdapterFilter filter = null; + switch (HttpClient5AdapterFilterType.getValue(type)) { + case SIMPLEFRAMEWORK: + filter = new SimpleFrameworkFilter(); + break; + case JBOBP: + filter = new JBOBPFilter(); + break; + case KFTCFACE: + filter = new KFTCFaceFilter(); + break; + case KFTCP2P: + filter = new KFTCP2PFilter(); + break; + case KAKAOBANK: + filter = new KAKAOBankFilter(); + break; + case NAVERFIN: + filter = new NAVERFinFilter(); + break; + case NICECREDIT: + filter = new NICECreditFilter(); + break; + case TOSSBANK: + filter = new TOSSBankFilter(); + break; + default: + filter = classForName(type); + if (filter == null) { + filter = classForName(basePackage + "." + type); + } + break; + } + + if (filter != null) { + h.put(type, filter); + return filter; + } else { + return null; + } + } + + private static HttpClientAdapterFilter classForName(String type) { + try { + Class cl = Class.forName(type); + return (HttpClientAdapterFilter) cl.newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + logger.error("Cannot create a HttpClientAdapterFilter. - {}", type); + return null; + } + } + + public static HttpClientAdapterExceptionFilter createExceptionFilter(String type) { + if (eh.containsKey(type)) { + return eh.get(type); + } + + HttpClientAdapterExceptionFilter filter = classForExceptionFilterName(type); + if (filter == null) { + filter = classForExceptionFilterName(basePackage + "." + type); + } + + if (filter != null) { + eh.put(type, filter); + return filter; + } else { + return null; + } + } + + private static HttpClientAdapterExceptionFilter classForExceptionFilterName(String type) { + try { + Class cl = Class.forName(type); + return (HttpClientAdapterExceptionFilter) cl.newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + logger.error("Cannot create a HttpClientAdapterExceptionFilter. - {}", type); + return null; + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java new file mode 100644 index 0000000..10aeff0 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java @@ -0,0 +1,23 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +public enum HttpClient5AdapterFilterType { + SIMPLEFRAMEWORK, + JBOBP, + KFTCFACE, + KFTCP2P, + KAKAOBANK, + NAVERFIN, + NICECREDIT, + TOSSBANK, + UNKNOWN; + + public static HttpClient5AdapterFilterType getValue(String type) { + try { + return valueOf(type.toUpperCase()); + } catch (NullPointerException e) { + return UNKNOWN; + } catch (Exception e) { + return UNKNOWN; + } + } +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java new file mode 100644 index 0000000..25f710a --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java @@ -0,0 +1,62 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import com.eactive.eai.common.util.Logger; + +public abstract class HttpClientAdapterBaseFilter implements HttpClientAdapterFilter { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + protected String filterName = ""; + protected List filters; + + protected HttpClientAdapterBaseFilter(String filterName) { + this.filterName = filterName; + filters = new ArrayList<>(); + logger.info("{}] filter created.", filterName); + } + + protected void addFilter(HttpClientAdapterFilter filter) { + filters.add(filter); + logger.info("{}] sub filter({}) added. filters= {}", filterName, filter, filters); + } + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + try { + Object filteredMessage = message; + for(HttpClientAdapterFilter subFilter : filters) { + logger.debug("{}] sub filter({}) doPreFilter start.", filterName, subFilter); + filteredMessage = subFilter.doPreFilter(adptGrpName, adptName, prop, filteredMessage, tempProp); + logger.debug("{}] sub filter({}) doPreFilter end.", filterName, subFilter); + } + + return filteredMessage; + } catch (Exception e) { + logger.error(this.filterName + "] doPreFilter error.", e); + throw e; + } + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + try { + Object filteredMessage = message; + for(HttpClientAdapterFilter subFilter : filters) { + logger.debug("{}] sub filter({}) doPostFilter start.", filterName, subFilter); + filteredMessage = subFilter.doPostFilter(adptGrpName, adptName, prop, filteredMessage, tempProp); + logger.debug("{}] sub filter({}) doPostFilter end.", filterName, subFilter); + } + return filteredMessage; + } catch (Exception e) { + logger.error(this.filterName + "] doPostFilter error.", e); + throw e; + } + } + + + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java new file mode 100644 index 0000000..6c809f3 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java @@ -0,0 +1,10 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +public interface HttpClientAdapterExceptionFilter { + + public Object doExceptionFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp, Exception e) throws Exception; + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java new file mode 100644 index 0000000..47c5682 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java @@ -0,0 +1,12 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +public interface HttpClientAdapterFilter { + + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception; + + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception; +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java new file mode 100644 index 0000000..691f050 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java @@ -0,0 +1,35 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import lombok.Getter; + +public class HttpClientAdapterFilterException extends RuntimeException { + private static final long serialVersionUID = -1208983360831093751L; + @Getter + private final String code; + @Getter + private final Properties prop; + @Getter + private final Properties tempProp; + + public HttpClientAdapterFilterException(String code, String msg, Properties prop, Properties tmepProp) { + super(msg); + this.code = code; + this.prop = prop; + this.tempProp = tmepProp; + } + + public HttpClientAdapterFilterException(String code, String msg, Properties prop, Properties tempProp, Throwable cause) { + super(msg, cause); + this.code = code; + this.prop = prop; + this.tempProp = tempProp; + } + + @Override + public String toString() { + return "HttpClientAdapterFilterException [code=" + code + ", prop=" + prop + ", tempProp=" + tempProp + ", parent=" + super.toString() + "]"; + } + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java new file mode 100644 index 0000000..4ae63db --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java @@ -0,0 +1,127 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String X_OBP_PARTNERCODE = "x-obp-partnercode"; + public static final String X_OBP_TXID = "x-obp-txid"; + public static final String X_OBP_TRUST_SYSTEM = "x-obp-trust-system"; + String systemTrustKey = "APIMGW-0001-QVBJTUdXLTAwMDE="; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) systemTrustKey = propGroupVo.getProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); + +// Properties inboundHeaders; +// String obp_partnercode; +// try { +// Object headerObj = tempProp.get(HttpAdapterServiceKey.INBOUND_HEADER); +// if (headerObj instanceof Properties) { //tomcat +// inboundHeaders = (Properties) headerObj; +// for ( String key : inboundHeaders.stringPropertyNames()) { +// if(key.equalsIgnoreCase(X_OBP_PARTNERCODE)) { +// obp_partnercode = inboundHeaders.getProperty(key); +// break; +// } +// } +// } else if (headerObj instanceof String) { //weblogic +// String str = (String) headerObj; +// str = str.substring(1, str.length() - 1); +// // 2. key=value 쌍 분리 +// String[] entries = str.split(","); +// // map에 담기 +// Map map = new HashMap<>(); +// for (String entry : entries) { +// String[] kv = entry.split("=", 2); +// if (kv.length == 2) { +// map.put(kv[0].trim(), kv[1].trim()); +// } +// } +// for (String k : map.keySet()) { +// if (k.equalsIgnoreCase(X_OBP_PARTNERCODE)) { +// obp_partnercode = map.get(k); +// break; +// } +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null){ + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, X_OBP_PARTNERCODE)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } + + String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + if (StringUtils.isNotBlank(uuid)) { + filterHeaders.setProperty(X_OBP_TXID, uuid); // JB OBP Framework용 + } + if (StringUtils.isNotBlank(systemTrustKey)) { + filterHeaders.setProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); // JB OBP Framework용 + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + +// Properties rquestHeaderProp = assignHeaderProp(tempProp, filterHeaders); +// tempProp.put("FILTERHEADER", filterHeaders); + + return returnMessage; + } + +// private Properties assignHeaderProp(Properties prop, HashMap filterHeaders) { +// Properties headerProp = new Properties(); +// if (filterHeaders.isEmpty()) { +// return headerProp; +// } +// +// for (String key : filterHeaders.keySet()) { +// String value = filterHeaders.get(key); +// headerProp.put(key, value); +// } +// +// return headerProp; +// } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java new file mode 100644 index 0000000..528357a --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java @@ -0,0 +1,98 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KAKAOBankFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kakaobank"; + public static final String X_KKB_PARTNER_CODE = "X-KKB-PARTNER-CODE"; + public static final String X_KKB_API_NAME = "X-KKB-API-NAME"; + public static final String X_KKB_API_TX_ID = "X-KKB-API-TX-ID"; + public static final String X_KKB_TX_TIME = "X-KKB-TX-TIME"; + public static final String X_KKB_CMPR_MGMT_NO = "X-KKB-CMPR-MGMT-NO"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String partnerCode = "KJB"; + String apiName = "status_change"; + String apiTxId = "0"; + String txTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String cmprMgmtNo = "0"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + partnerCode = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_PARTNER_CODE); + apiName = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_API_NAME); + apiTxId = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_API_TX_ID); + cmprMgmtNo = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_CMPR_MGMT_NO); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_KKB_PARTNER_CODE)) { + filterHeaders.put(X_KKB_PARTNER_CODE, inboundHeader.get(X_KKB_PARTNER_CODE)); + } else { + filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode); + } + if (inboundHeader.containsKey(X_KKB_API_NAME)) { + filterHeaders.put(X_KKB_API_NAME, inboundHeader.get(X_KKB_API_NAME)); + } else { + filterHeaders.put(X_KKB_API_NAME, apiName); + } + if (inboundHeader.containsKey(X_KKB_API_TX_ID)) { + filterHeaders.put(X_KKB_API_TX_ID, inboundHeader.get(X_KKB_API_TX_ID)); + } else { + filterHeaders.put(X_KKB_API_TX_ID, apiTxId); + } + if (inboundHeader.containsKey(X_KKB_TX_TIME)) { + filterHeaders.put(X_KKB_TX_TIME, inboundHeader.get(X_KKB_TX_TIME)); + } else { + filterHeaders.put(X_KKB_TX_TIME, txTime); + } + if (inboundHeader.containsKey(X_KKB_CMPR_MGMT_NO)) { + filterHeaders.put(X_KKB_CMPR_MGMT_NO, inboundHeader.get(X_KKB_CMPR_MGMT_NO)); + } else { + filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); + } + } else { + filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode); + filterHeaders.put(X_KKB_API_NAME, apiName); + filterHeaders.put(X_KKB_API_TX_ID, apiTxId); + filterHeaders.put(X_KKB_TX_TIME, txTime); + filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java new file mode 100644 index 0000000..36151c7 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java @@ -0,0 +1,124 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +//import com.eactive.eai.authoutbound.OutboundOAuthCredentialDao; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kftcface"; + public static final String H_CLIENT_ID = "Client-Id"; + public static final String B_ORG_CODE = "org_code"; + public static final String B_TRANSACTION_ID = "transaction_id"; + public static final String B_REQUEST_DATETIME = "request_datetime"; +// private final OutboundOAuthCredentialDao credentialDao; + +// public KFTCFaceFilter() { +// this.credentialDao = new OutboundOAuthCredentialDao(); + // TODO Auto-generated constructor stub +// } + + @SuppressWarnings({ "null", "unchecked" }) + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + JSONObject returnMessage = null; + String clientId = ""; + String orgCode = "034"; // 광주은행 행코드 + +// OutboundOAuthCredentialVo outboundOAuthCredentialVo = credentialDao.getClientId(adptGrpName);//credentialDao.getOutboundOAuthCredential(adptGrpName); +// clientId = credentialDao.getClientId(adptGrpName);//outboundOAuthCredentialVo.getClientId(); + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + if (StringUtils.isEmpty(clientId)) + clientId = propGroupVo.getProperty(PROP_PREFIX + "." + H_CLIENT_ID); + orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + B_ORG_CODE); + } + + String request_datetime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String transaction_id = orgCode + request_datetime + "1" + RandomStringUtils.random(4, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null && inboundHeader.containsKey(H_CLIENT_ID)) { + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, H_CLIENT_ID)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } else { + filterHeaders.setProperty(H_CLIENT_ID, clientId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + AdapterManager adapterManager = AdapterManager.getInstance(); + AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adptGrpName); + String encode = adptGrpVO.getMessageEncode(); + if (message == null) { + returnMessage = new JSONObject(); + } else { + if (message instanceof JSONObject) { + returnMessage = (JSONObject) message; + } else if (message instanceof String) { + returnMessage = parseJson((String) message); + } else if (message instanceof byte[]) { + returnMessage = parseJson(new String((byte[]) message, encode)); + } + } + + returnMessage.put(B_ORG_CODE, orgCode); + returnMessage.put(B_TRANSACTION_ID, transaction_id); + returnMessage.put(B_REQUEST_DATETIME, request_datetime); + + return returnMessage.toJSONString(); + } + + private JSONObject parseJson(String message) throws Exception { + if (message == null) { + return null; + } + + return (JSONObject) JSONValue.parse(message); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java new file mode 100644 index 0000000..e3d9dc0 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java @@ -0,0 +1,77 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.RandomStringUtils; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KFTCP2PFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kftcp2p"; + public static final String H_ORG_CODE = "org_code"; + public static final String H_TRX_NO = "api_trx_no"; + public static final String H_TRX_DTM = "api_trx_dtm"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String orgCode = "034"; // 광주은행 행코드 + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + H_ORG_CODE); + } + + String apiTrxDtm = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String apiTrxNo = orgCode + apiTrxDtm + "1" + RandomStringUtils.random(5, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(H_TRX_NO)) { + filterHeaders.put(H_TRX_NO, inboundHeader.get(H_TRX_NO)); + } else { + filterHeaders.put(H_TRX_NO, apiTrxNo); + } + if (inboundHeader.containsKey(H_TRX_DTM)) { + filterHeaders.put(H_TRX_DTM, inboundHeader.get(H_TRX_DTM)); + } else { + filterHeaders.put(H_TRX_DTM, apiTrxDtm); + } + } else { +// filterHeaders.setProperty(H_TRX_NO, apiTrxNo); + filterHeaders.put(H_TRX_NO, apiTrxNo); + filterHeaders.put(H_TRX_DTM, apiTrxDtm); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java new file mode 100644 index 0000000..b228646 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java @@ -0,0 +1,70 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class NAVERFinFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "naverfin"; + public static final String X_PARTNER_ID = "X-Partner-Id"; + public static final String X_FINTECH_ID = "X-Fintech-Id"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String partnerID = "r0jtqwC9gAW5"; + String fintechId = "NF"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + partnerID = propGroupVo.getProperty(PROP_PREFIX + "." + X_PARTNER_ID); + fintechId = propGroupVo.getProperty(PROP_PREFIX + "." + X_FINTECH_ID); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_PARTNER_ID)) { + filterHeaders.put(X_PARTNER_ID, inboundHeader.get(X_PARTNER_ID)); + } else { + filterHeaders.put(X_PARTNER_ID, partnerID); + } + if (inboundHeader.containsKey(X_FINTECH_ID)) { + filterHeaders.put(X_FINTECH_ID, inboundHeader.get(X_FINTECH_ID)); + } else { + filterHeaders.put(X_FINTECH_ID, fintechId); + } + } else { + filterHeaders.put(X_PARTNER_ID, partnerID); + filterHeaders.put(X_FINTECH_ID, fintechId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java new file mode 100644 index 0000000..1d3802c --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java @@ -0,0 +1,108 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class NICECreditFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "nicecredit"; + public static final String H_PRODUCTID = "ProductID"; + public static final String B_REQ_DTM = "req_dtm"; + public static final String B_GOODS_CLS = "goods_cls"; + + @SuppressWarnings({ "unchecked" }) + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + JSONObject returnMessage = null; + String productId = "2303102120"; + String reqDtm = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String goodsCls = "KJBAPI0001"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + productId = propGroupVo.getProperty(PROP_PREFIX + "." + H_PRODUCTID); + goodsCls = propGroupVo.getProperty(PROP_PREFIX + "." + B_GOODS_CLS); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null && inboundHeader.containsKey(H_PRODUCTID)) { + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, H_PRODUCTID)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } else { + filterHeaders.setProperty(H_PRODUCTID, productId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + AdapterManager adapterManager = AdapterManager.getInstance(); + AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adptGrpName); + String encode = adptGrpVO.getMessageEncode(); + if (message == null) { + returnMessage = new JSONObject(); + } else { + if (message instanceof JSONObject) { + returnMessage = (JSONObject) message; + } else if (message instanceof String) { + returnMessage = parseJson((String) message); + } else if (message instanceof byte[]) { + returnMessage = parseJson(new String((byte[]) message, encode)); + } + } + + returnMessage.put(B_REQ_DTM, reqDtm); + returnMessage.put(B_GOODS_CLS, goodsCls); + + return returnMessage.toJSONString(); + } + + private JSONObject parseJson(String message) throws Exception { + if (message == null) { + return null; + } + + return (JSONObject) JSONValue.parse(message); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java new file mode 100644 index 0000000..a91d914 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java @@ -0,0 +1,60 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceSupport; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.util.Logger; + +public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String CLIENTID = "clientId"; + public static final String TRACEID = "traceId"; + public static final String GUID = "guid"; + public static final String RECEIVEDTIMESTAMP = "receivedTimestamp"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + /* 업체정보 */ + String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID); + filterHeaders.setProperty(CLIENTID, clientId); + + /* APIM 거래추적자 */ + String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + filterHeaders.setProperty(TRACEID, uuid); + + /* GUID */ + String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); + filterHeaders.setProperty(GUID, guid); + + /* 최초요청시간 */ + String receivedTimestamp = tempProp.getProperty(HttpAdapterServiceKey.INBOUND_REQUESTED_TIME, ""); + filterHeaders.setProperty(RECEIVEDTIMESTAMP, receivedTimestamp); + } catch (Exception e) { + logger.error(e.getMessage()); + } + +// tempProp.put("FILTERHEADER", filterHeaders); + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java new file mode 100644 index 0000000..ae13d83 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java @@ -0,0 +1,64 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class TOSSBankFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "tossbank"; + public static final String X_TOSSBANK_LOAN_TRACE_ID = "X-TOSSBANK-LOAN-TRACE-ID"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { +// partnerID = propGroupVo.getProperty(PROP_PREFIX + "." + X_PARTNER_ID); +// fintechId = propGroupVo.getProperty(PROP_PREFIX + "." + X_FINTECH_ID); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) { + filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeader.get(X_TOSSBANK_LOAN_TRACE_ID)); + } else { + filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, traceId); + } + } else { + /* APIM 거래추적자 */ + filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java new file mode 100644 index 0000000..f0be751 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java @@ -0,0 +1,221 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.impl; + +import java.util.Properties; +//import java.util.concurrent.Callable; + +import org.apache.commons.lang3.StringUtils; +import org.dom4j.Node; +import org.json.simple.JSONObject; + +import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey; +import com.eactive.eai.adapter.http.client.impl.HttpClient5AdapterServiceRest; +import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClient5AdapterFilterFactory; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClientAdapterExceptionFilter; +import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClientAdapterFilter; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.IBKOutCommonFilter; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.IBKOutExceptionFilter; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import com.fasterxml.jackson.databind.node.ObjectNode; +//import com.ibk.eai.common.circuitbreaker.url.UrlCircuitBreakerManager; + +//import io.github.resilience4j.circuitbreaker.CircuitBreaker; + +/** + * 1. 기능 : HttpClient5AdapterServiceRest 호출 전후 Filter 적용할 수 있는 기능을 제공한다.
+ * 2. 처리 개요 :
+ * 3. 주의사항
+ * + * @author : + * @version : v 1.0.0 + * @see : HttpClientAdapterServiceFactory.java, + * HttpClientAdapterServiceSupport.java, HttpClient5AdapterServiceRest.java + * @since : + * + */ +public class HttpClient5AdapterServiceRestAddFilter extends HttpClient5AdapterServiceRest + implements HttpClientAdapterServiceKey { + + // 요청전 수행할 필터(쉼표(,)로 구분) + static final String PRE_FILTERS = "PRE_FILTERS"; + + // 요청후 수행할 필터(쉼표(,)로 구분) + static final String POST_FILTERS = "POST_FILTERS"; + +// // Adapter에서 Exception이 발생한 경우, 처리할 필터 +// static final String EXCEPTION_FILTER = "EXCEPTION_FILTER"; + + /** + * 1. 기능 : HttpClient 호출 전후 Filter 적용용 2. 처리 개요 :
+ * 3. 주의사항
+ * + * @param prop Http Adapter 속성 정보 + * @return 반환 된 Object + * @exception Exception 수동 시스템 간 통신 중 발생 + */ + public Object execute(Properties prop, Object data, Properties tempProp) throws Exception { + + String adptGrpName = tempProp.getProperty(ADAPTER_GROUP_NAME); + String adptName = tempProp.getProperty(ADAPTER_NAME); + + data = doPreFilters(adptGrpName, adptName, prop, data, tempProp); + + Object adapterResponse = super.execute(prop, data, tempProp); + +// //원본 url를 찾아서 있으면, 그것을 사용한다. +// String url = tempProp.getProperty("URL_ORG"); +// if(StringUtils.isEmpty(url)) +// url = tempProp.getProperty(HttpClientAdapterServiceKey.URL); +// +// UrlCircuitBreakerManager cManager = UrlCircuitBreakerManager.getInstance(); +// CircuitBreaker circuitBreaker = cManager.getCircuitBreaker(url); +// try { +// if (circuitBreaker != null) { +// if (logger.isDebugEnabled()) { +// // ObjectMapper 인스턴스 생성 +// ObjectMapper objectMapper = new ObjectMapper(); +// // 서킷 브레이커의 메트릭 정보와 상태 정보를 직접 Node로 변환 +// ObjectNode combinedNode = objectMapper.createObjectNode(); +// combinedNode.put("state", circuitBreaker.getState().toString()); +// combinedNode.set("metrics", objectMapper.valueToTree(circuitBreaker.getMetrics())); +// logger.debug("CircuitBreaker state [" + circuitBreaker.getName() + "] - " + combinedNode.toString()); +// } +// adapterResponse = circuitBreaker.executeCallable(new HttpClientAdapterCallable(prop, data, tempProp, this)); +// } else { +// adapterResponse = super.execute(prop, data, tempProp); +// } +// } catch (Exception e) { +// adapterResponse = doExceptionFilters(adptGrpName, adptName, prop, adapterResponse, tempProp, e); +// +// if (adapterResponse instanceof JSONObject) +// adapterResponse = ((JSONObject) adapterResponse).toJSONString(); +// +// if (adapterResponse instanceof Node) +// adapterResponse = ((Node) adapterResponse).asXML(); +// +// return adapterResponse; +// } + + adapterResponse = doPostFilters(adptGrpName, adptName, prop, adapterResponse, tempProp); + if (adapterResponse instanceof JSONObject) + adapterResponse = ((JSONObject) adapterResponse).toJSONString(); + + if (adapterResponse instanceof Node) + adapterResponse = ((Node) adapterResponse).asXML(); + + return adapterResponse; + } + +// protected Object callSuper(Properties prop, Object data, Properties tempProp) throws Exception { +// return super.execute(prop, data, tempProp); +// } + +// private class HttpClientAdapterCallable implements Callable { +// Properties prop; +// Object data; +// Properties tempProp; +// HttpClient5AdapterServiceRestAddFilter clientService; +// +// public HttpClientAdapterCallable(Properties prop, Object data, Properties tempProp, +// HttpClient5AdapterServiceRestAddFilter clientService) { +// this.prop = prop; +// this.data = data; +// this.tempProp = tempProp; +// this.clientService = clientService; +// } +// +// @Override +// public Object call() throws Exception { +// return clientService.callSuper(prop, data, tempProp); +// } +// +// } + + protected Object doPreFilters(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + +// boolean isSetCommonFilterInAdapterProp = false; + // 1. adapter에 설정된 필터 수행 + String preFiltersStr = prop.getProperty(PRE_FILTERS); + if (StringUtils.isNotEmpty(preFiltersStr)) { + String[] preFilters = StringUtils.split(preFiltersStr, ","); + for (String filterName : preFilters) { + if (StringUtils.isBlank(filterName)) { + continue; + } + + HttpClientAdapterFilter adapterFilter = HttpClient5AdapterFilterFactory.createFilter(filterName.trim()); + + if (adapterFilter != null) { +// if (adapterFilter instanceof IBKOutCommonFilter) +// isSetCommonFilterInAdapterProp = true; + + message = adapterFilter.doPreFilter(adptGrpName, adptName, prop, message, tempProp); + } else { + throw new Exception("Failed get Filter Class: " + filterName); + } + } + } + +// // 2. IBKOutCommonFilter 필터 수행(adapter 필터에서 수행하지 않을 때만) +// if (!isSetCommonFilterInAdapterProp) { +// HttpClientAdapterFilter ibkFilter = HttpClient5AdapterFilterFactory +// .createFilter(IBKOutCommonFilter.class.getName()); +// if (ibkFilter != null) { +// message = ibkFilter.doPreFilter(adptGrpName, adptName, prop, message, tempProp); +// } +// } else { +// logger.debug("IBKOutCommonFilter isSetCommonFilterInAdapterProp 'POST_FILTERS'. already in adapter filters"); +// } + + return message; + } + + protected Object doPostFilters(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + +// boolean isSetCommonFilterInAdapterProp = false; + // 1. adapter에 설정된 필터 수행 + String postFiltersStr = prop.getProperty(POST_FILTERS); + if (StringUtils.isNotEmpty(postFiltersStr)) { + String[] postFilters = StringUtils.split(postFiltersStr, ","); + for (String filterName : postFilters) { + if (StringUtils.isBlank(filterName)) { + continue; + } + + HttpClientAdapterFilter adapterFilter = HttpClient5AdapterFilterFactory.createFilter(filterName.trim()); + if (adapterFilter != null) { +// if (adapterFilter instanceof IBKOutCommonFilter) +// isSetCommonFilterInAdapterProp = true; + message = adapterFilter.doPostFilter(adptGrpName, adptName, prop, message, tempProp); + } else { + throw new Exception("Failed get Filter Class: " + filterName); + } + } + } + +// // 2. IBKOutCommonFilter 필터 수행 +// if (!isSetCommonFilterInAdapterProp) { +// HttpClientAdapterFilter ibkFilter = HttpClient5AdapterFilterFactory +// .createFilter(IBKOutCommonFilter.class.getName()); +// if (ibkFilter != null) { +// message = ibkFilter.doPostFilter(adptGrpName, adptName, prop, message, tempProp); +// } +// } else { +// logger.debug("IBKOutCommonFilter isSetCommonFilterInAdapterProp 'PRE_FILTERS'. already in adapter filters"); +// } + return message; + } + +// protected Object doExceptionFilters(String adptGrpName, String adptName, Properties prop, Object message, +// Properties tempProp, Exception e) throws Exception { +// String exceptionFilterName = prop.getProperty(EXCEPTION_FILTER); +// if (StringUtils.isEmpty(exceptionFilterName)) +// exceptionFilterName = IBKOutExceptionFilter.class.getSimpleName(); +// +// HttpClientAdapterExceptionFilter exceptionFilter = HttpClient5AdapterFilterFactory.createExceptionFilter(exceptionFilterName.trim()); +// return exceptionFilter.doExceptionFilter(adptGrpName, adptName, prop, message, tempProp, e); +// +// } + +} \ No newline at end of file From 0919d9c5997f2a78ab906a1ee3ee22a59f2eb424 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Mon, 22 Dec 2025 13:57:27 +0900 Subject: [PATCH 05/13] =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=ED=8C=A8?= =?UTF-8?q?=EC=8A=A4=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http/dynamic/filter/KjbHmacSha256VerifyFilter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java index 2ef0367..9b911de 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/dynamic/filter/KjbHmacSha256VerifyFilter.java @@ -1,4 +1,4 @@ -package com.eactive.eai.custom.adapter.http.dynamic.filter; +package com.eactive.eai.custom.kjb.adapter.http.dynamic.filter; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; @@ -27,6 +27,10 @@ public class KjbHmacSha256VerifyFilter implements HttpAdapterFilter, HttpAdapter static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); private static final String SERVICE_CODE_UNKNOWN = "00"; + + public KjbHmacSha256VerifyFilter() { + super(); + } @Override public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop, From d934435fb7bb6fe00f388ef81b344b7a1ccd2068 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Mon, 22 Dec 2025 20:35:40 +0900 Subject: [PATCH 06/13] =?UTF-8?q?Debuging=EC=9D=84=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?Logger=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http/client/filter/SimpleFrameworkFilter.java | 13 +++++++++---- .../HttpClient5AdapterServiceRestAddFilter.java | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java index a91d914..cbc6161 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java @@ -19,6 +19,7 @@ public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapt public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("SimpleFrameworkFilter] Processing Start!! ======================================================================"); Object returnMessage = message; Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); @@ -29,19 +30,23 @@ public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapt try { /* 업체정보 */ String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID); - filterHeaders.setProperty(CLIENTID, clientId); + filterHeaders.put(CLIENTID, clientId); + logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",CLIENTID,clientId); /* APIM 거래추적자 */ String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); - filterHeaders.setProperty(TRACEID, uuid); + filterHeaders.put(TRACEID, uuid); + logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",TRACEID, uuid); /* GUID */ String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); - filterHeaders.setProperty(GUID, guid); + filterHeaders.put(GUID, guid); + logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",GUID, guid); /* 최초요청시간 */ String receivedTimestamp = tempProp.getProperty(HttpAdapterServiceKey.INBOUND_REQUESTED_TIME, ""); - filterHeaders.setProperty(RECEIVEDTIMESTAMP, receivedTimestamp); + filterHeaders.put(RECEIVEDTIMESTAMP, receivedTimestamp); + logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",RECEIVEDTIMESTAMP, receivedTimestamp); } catch (Exception e) { logger.error(e.getMessage()); } diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java index f0be751..30fbca3 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java @@ -143,6 +143,7 @@ public class HttpClient5AdapterServiceRestAddFilter extends HttpClient5AdapterSe continue; } + logger.debug("HttpClient5AdapterServiceRestAddFilter] Processing Start [" + filterName + "]"); HttpClientAdapterFilter adapterFilter = HttpClient5AdapterFilterFactory.createFilter(filterName.trim()); if (adapterFilter != null) { From c076c32d847e1725eb9b9627729315c47fb8308a Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Mon, 22 Dec 2025 21:26:30 +0900 Subject: [PATCH 07/13] =?UTF-8?q?Debugging=EC=9D=84=20=EC=9C=84=ED=95=9C?= =?UTF-8?q?=20Logger=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kjb/adapter/http/client/filter/JBOBPFilter.java | 4 ++++ .../adapter/http/client/filter/KAKAOBankFilter.java | 6 ++++++ .../adapter/http/client/filter/KFTCFaceFilter.java | 3 +++ .../adapter/http/client/filter/KFTCP2PFilter.java | 3 +++ .../adapter/http/client/filter/NAVERFinFilter.java | 3 +++ .../http/client/filter/SimpleFrameworkFilter.java | 13 ++++++++----- .../adapter/http/client/filter/TOSSBankFilter.java | 2 ++ 7 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java index 4ae63db..770e23c 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java @@ -25,6 +25,7 @@ public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceK public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("JBOBPFilter] PreFilter Processing Start!!"); Object returnMessage = message; PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); if (propGroupVo != null) systemTrustKey = propGroupVo.getProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); @@ -79,6 +80,7 @@ public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceK if (StringUtils.equalsIgnoreCase(key, X_OBP_PARTNERCODE)) { filterHeaders.setProperty(key, value); + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+value+"]"); } if (logger.isDebugEnabled()) { logger.debug("Request Header :" + key + "=[" + value + "]"); @@ -89,9 +91,11 @@ public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceK String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); if (StringUtils.isNotBlank(uuid)) { filterHeaders.setProperty(X_OBP_TXID, uuid); // JB OBP Framework용 + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_TXID+"], value ["+uuid+"]"); } if (StringUtils.isNotBlank(systemTrustKey)) { filterHeaders.setProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); // JB OBP Framework용 + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_TRUST_SYSTEM+"], value ["+systemTrustKey+"]"); } } catch (Exception e) { logger.error(e.getMessage()); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java index 528357a..7adac57 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java @@ -25,6 +25,7 @@ public class KAKAOBankFilter implements HttpClientAdapterFilter, HttpAdapterServ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("KAKAOBankFilter] PreFilter Processing Start!!"); Object returnMessage = message; String partnerCode = "KJB"; String apiName = "status_change"; @@ -80,6 +81,11 @@ public class KAKAOBankFilter implements HttpClientAdapterFilter, HttpAdapterServ filterHeaders.put(X_KKB_TX_TIME, txTime); filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); } + logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_PARTNER_CODE+"], value ["+filterHeaders.getProperty(X_KKB_PARTNER_CODE)+"]"); + logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_API_NAME+"], value ["+filterHeaders.getProperty(X_KKB_API_NAME)+"]"); + logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_API_TX_ID+"], value ["+filterHeaders.getProperty(X_KKB_API_TX_ID)+"]"); + logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_TX_TIME+"], value ["+filterHeaders.getProperty(X_KKB_TX_TIME)+"]"); + logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_CMPR_MGMT_NO+"], value ["+filterHeaders.getProperty(X_KKB_CMPR_MGMT_NO)+"]"); } catch (Exception e) { logger.error(e.getMessage()); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java index 36151c7..35a7698 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java @@ -40,6 +40,7 @@ public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServi public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("KFTCFaceFilter] PreFilter Processing Start!!"); JSONObject returnMessage = null; String clientId = ""; String orgCode = "034"; // 광주은행 행코드 @@ -71,6 +72,7 @@ public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServi if (StringUtils.equalsIgnoreCase(key, H_CLIENT_ID)) { filterHeaders.setProperty(key, value); + logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+value+"]"); } if (logger.isDebugEnabled()) { logger.debug("Request Header :" + key + "=[" + value + "]"); @@ -78,6 +80,7 @@ public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServi } } else { filterHeaders.setProperty(H_CLIENT_ID, clientId); + logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+clientId+"]"); } } catch (Exception e) { diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java index e3d9dc0..de4affe 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java @@ -25,6 +25,7 @@ public class KFTCP2PFilter implements HttpClientAdapterFilter, HttpAdapterServic public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("KFTCP2PFilter] PreFilter Processing Start!!"); Object returnMessage = message; String orgCode = "034"; // 광주은행 행코드 @@ -59,6 +60,8 @@ public class KFTCP2PFilter implements HttpClientAdapterFilter, HttpAdapterServic filterHeaders.put(H_TRX_NO, apiTrxNo); filterHeaders.put(H_TRX_DTM, apiTrxDtm); } + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+filterHeaders.getProperty(H_TRX_NO)+"]"); + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+filterHeaders.getProperty(H_TRX_DTM)+"]"); } catch (Exception e) { logger.error(e.getMessage()); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java index b228646..186b79e 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java @@ -20,6 +20,7 @@ public class NAVERFinFilter implements HttpClientAdapterFilter, HttpAdapterServi public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("NAVERFinFilter] PreFilter Processing Start!!"); Object returnMessage = message; String partnerID = "r0jtqwC9gAW5"; String fintechId = "NF"; @@ -52,6 +53,8 @@ public class NAVERFinFilter implements HttpClientAdapterFilter, HttpAdapterServi filterHeaders.put(X_PARTNER_ID, partnerID); filterHeaders.put(X_FINTECH_ID, fintechId); } + logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+filterHeaders.getProperty(X_PARTNER_ID)+"]"); + logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+filterHeaders.getProperty(X_FINTECH_ID)+"]"); } catch (Exception e) { logger.error(e.getMessage()); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java index cbc6161..f4a6813 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java @@ -2,6 +2,8 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; import java.util.Properties; +import org.apache.commons.lang3.StringUtils; + import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceSupport; import com.eactive.eai.common.TransactionContextKeys; @@ -19,7 +21,7 @@ public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapt public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { - logger.debug("SimpleFrameworkFilter] Processing Start!! ======================================================================"); + logger.debug("SimpleFrameworkFilter] PreFilter Processing Start!!"); Object returnMessage = message; Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); @@ -30,23 +32,24 @@ public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapt try { /* 업체정보 */ String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID); + if (StringUtils.isEmpty(clientId)) clientId = ""; filterHeaders.put(CLIENTID, clientId); - logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",CLIENTID,clientId); + logger.debug("SimpleFrameworkFilter] Processing Key ["+CLIENTID+"], value ["+clientId+"]"); /* APIM 거래추적자 */ String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); filterHeaders.put(TRACEID, uuid); - logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",TRACEID, uuid); + logger.debug("SimpleFrameworkFilter] Processing Key ["+TRACEID+"], value ["+uuid+"]"); /* GUID */ String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); filterHeaders.put(GUID, guid); - logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",GUID, guid); + logger.debug("SimpleFrameworkFilter] Processing Key ["+GUID+"], value ["+guid+"]"); /* 최초요청시간 */ String receivedTimestamp = tempProp.getProperty(HttpAdapterServiceKey.INBOUND_REQUESTED_TIME, ""); filterHeaders.put(RECEIVEDTIMESTAMP, receivedTimestamp); - logger.debug("SimpleFrameworkFilter] Processing Key [%s], value [%s]",RECEIVEDTIMESTAMP, receivedTimestamp); + logger.debug("SimpleFrameworkFilter] Processing Key ["+RECEIVEDTIMESTAMP+"], value ["+receivedTimestamp+"]"); } catch (Exception e) { logger.error(e.getMessage()); } diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java index ae13d83..c325da3 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java @@ -20,6 +20,7 @@ public class TOSSBankFilter implements HttpClientAdapterFilter, HttpAdapterServi public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) throws Exception { + logger.debug("TOSSBankFilter] PreFilter Processing Start!!"); Object returnMessage = message; String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); @@ -46,6 +47,7 @@ public class TOSSBankFilter implements HttpClientAdapterFilter, HttpAdapterServi /* APIM 거래추적자 */ filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId); } + logger.debug("NAVERFinFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+filterHeaders.getProperty(X_TOSSBANK_LOAN_TRACE_ID)+"]"); } catch (Exception e) { logger.error(e.getMessage()); From d477d1d5758340f39c168f5eba358da3dd85acb8 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Mon, 22 Dec 2025 21:27:43 +0900 Subject: [PATCH 08/13] =?UTF-8?q?KJBank=EC=9A=A9=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89/=EA=B2=80=EC=A6=9D=EC=9A=A9=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=EC=9D=B8=EC=A6=9D=ED=82=A4=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/certificate/KJBank-oAuth-dev.jks | Bin 0 -> 2772 bytes .../resources/certificate/KJBank-oAuth-dev.pub | 9 +++++++++ .../certificate/product/KJBank-oAuth-prod.jks | Bin 0 -> 2269 bytes .../certificate/product/KJBank-oAuth-prod.pub | 9 +++++++++ 4 files changed, 18 insertions(+) create mode 100644 src/main/resources/certificate/KJBank-oAuth-dev.jks create mode 100644 src/main/resources/certificate/KJBank-oAuth-dev.pub create mode 100644 src/main/resources/certificate/product/KJBank-oAuth-prod.jks create mode 100644 src/main/resources/certificate/product/KJBank-oAuth-prod.pub diff --git a/src/main/resources/certificate/KJBank-oAuth-dev.jks b/src/main/resources/certificate/KJBank-oAuth-dev.jks new file mode 100644 index 0000000000000000000000000000000000000000..ec007ca4062e073dd336293e427e582f45413120 GIT binary patch literal 2772 zcma)8c{mh`7M~fjWX2$5A7&WaFpPcdTefJjOr*G7!`Rm(7h`BJN@T4|_9eO_O7^5h zh)B}37z&e=HCZBw>wWKi-S7SN-XG^X=lquQ=kGfN27Ckrbzlahb|0?VuQDj&KQ2Bv5LC{9nD2we1ixPn2$JAIApW!R z5mdnacqML+f?99Sa@=}jL-mPfJY9Y-Qx}Qk-nMWP7vUO0G0$jUwF--Rjy!e?Po?g zVehe11s*3lv-%_Xz2RNV%Fvn93}*YH?a5XyHeABr0Nta;CZS8IQ!AEM^+i^lA2ae9 zBQ>r#RrdJ!Z*e7xGmVMTnOzG~YdB3hjSu_iV}%*&(Y<2fc9zAIwztrWSBTZmS05pQ zeaRBqP60#Zo`{jNblDca@kZrO5du0t-`ALL@DC4`7x+W@@3b^KE85&>H0W|QVVQij zBi76(L)4ohgI`C-;I}v9zx>AenncXjb%@apEs6Eu*LOI>^WAKzIIGb}y6un2Qb_jP ziW-XePK_m8*{T|kV|${(Kep2xwpHfI-RE^D5-%CV&W2xn8#XPaJxItKQU_?b&CU|h z!^UbNymDD8_d0dDNnsB^|5>vd{)JIKWCEOyX)e7lwkkbngMt2XZ z_?yzzDM7YV52`SbyK+BhGKPE{RP^e=Sclo+(4$jE>5BDv=@|_=(>sm5EHCS=Z&c?N z>(aW`H-~moQ>56Ix}$?8^cyVOPNRXTB&89VYuWI`B{C z*C=j1izYE5fR}Y04;-Z0E^2tW^BT3>Qw|S87z%R9et3EGLsjdm_!Uulq0V4}b96YY z_RA)M=r|^Y{Gd>zp%kHHx@ufcvma6aQubG5pTgHJBU4RTjffmXW9W^}V`fDs>@VSG z2u$%P=)kJ_ilF~!f&038ef1D{w{-1OW<|WcVn!ynRdX+V^8Bd4bTNelEu@E%E2opf z*&04`J6F;dQ1jz@79aIo0CjvG`d!RQ`RiQ&|Cd{XP+sVjrVA5_=lFVJ+8Od z?qivuKisE37)Ql~oS1)z0H_%2W#Wh)hAPM@<*whq+f=`<^hg4EGPh?kDf5$!+XyTw^(r{1 z4-}rzSY=vzUxoiNCFr({N;DHt74{}->%D~TN>irLfc5D#sFqs!%cr)j?--4HVsbeS z6ty5RKuD6XL0C( zU2i2WY}ZRH(C6s_J>eoN_w}9^b_R|eeUoD>W%$&tT6z~C*7mgDD>Ww2E(Lbsrit|H z=bz{v<{i}6LmTf_ea|2`JUl0Q>xXjQjDEKsVV308zKbTF#4Kt8-50k@V`kkGVOpj{ z)hSyMH~;47!e_}5u&ym|Zq1m=IuUqy9QzlAbgKVs;^ETeGW!$#c0zhLnci=$Lmu$2 z55;g?*5F#GPpBG*nWmeMR~BFX1h&` zsVIe=+sl&I*k!vBFG-+x+NUNZSV!NMrKlToPXC1u0`!GItD1>g+`+n?}&@ck(oa260i!2BaTq$vUxA_s<2(VF^t zdfG%?1ASdRJtBbtuJ|Q_LCYE7+G#)|{E zL)_;7C$ecx+J;$P+YjBe@7rD-R(45ZfCV}F!|uV^Dwv%km5?6HW`|5N8oa)|7>2Ex zhjKd>m48PjkMWMQVNYwAv+66&)>txg9TAwXeQt*k1$i@OD_8*833)0O?^xOtQ2*9F zuMJLV|FU}L~?kE zYO=B{v%84Yt*=)Wo*Hujx{P%+G-GIk?~Xm9i^Mc5q`O|hdR|HM)f){eej>%P9#8Lh zz)WiecUKIUX202p59!bS8QdyZD&u2biSWzk@>}>TmWA|ScxUkkQ?-#;ujRVur_wEq zo@X0stntFD<7M?o*PMWn6oWpq4PdNlT^r4^4wGCnz@K*Hd!`M22qertt3oS2wJU~u z(O&T~q+)n$siALB^ zA2`sl;)fGo#~8zM$LN!GsjNv-xj{tHx2FNu7f*L(gn$%$2I!ma1KWmu5!%D+0)kibp7E?ie`!SlV)%_SGdcu0<`^- zpf1qQKf04i?4r=5Z{NB1>wj zuLn!;U*Gm#X%kJCD69BvgIMW{gt?=rqCuhGTCu=7^(1&mxjn=C!ZC(v`+Y4zR(YqVLMUH2cZW=XtThGN$^KUuQa8lljni}O(uFido1pxmLW@PB==?Bp`o%dLSSK07gseKF3)DyA5qgt-5ta vvvFGRPRD9ABI2SXvUGyU76Xg4{IP^4=|rfarOTWSfM9W!-I5Rg6-j>sJB`~c literal 0 HcmV?d00001 diff --git a/src/main/resources/certificate/KJBank-oAuth-dev.pub b/src/main/resources/certificate/KJBank-oAuth-dev.pub new file mode 100644 index 0000000..ef63b00 --- /dev/null +++ b/src/main/resources/certificate/KJBank-oAuth-dev.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzY3zugQeOrTkol2fHIhD +/S8FqvNX6ijrU7v8wEnaIYVG1ay6ehAmlg6dc7J0Bvf1Ed5EvbDEI+4sa8n6egWa +zHSL4GXQXj9QFZGvRRah6nPhYiAvbLqHPwvG4QreIwx1Yt4tx63m8gFid6QjEsZP +DbWeX6bXW1scR+qtztkq2CGvOHlej5JHsdP350hH3Hq2sxdmTHurVwFJdfzBwDkU +MJlLwIEkkbACK1hrQhrEf1uKX8HtxrozSS8sso4wFrOPe8u/ykqYmSPlSfUsPvNr +cK/VroyX63RAE+giH84Y8mSHLr+mfEG3AhdJ1+ZqB9jBunTZDiGKn00mT4jJLwgr +BwIDAQAB +-----END PUBLIC KEY----- diff --git a/src/main/resources/certificate/product/KJBank-oAuth-prod.jks b/src/main/resources/certificate/product/KJBank-oAuth-prod.jks new file mode 100644 index 0000000000000000000000000000000000000000..f0cabb6ba1e9695df8619e585c9d3a8d285893ef GIT binary patch literal 2269 zcmc(g={wX77sux}Gxl|irLkp6G6p}(*s_#l$r9PKj?CD%GPWXyN47GSkY%`$>}5|W z*-K$cB1^U@%Y>1Xq&(`ybKU>J^Wwbte9w7tuJ1Y5IltF`uR|aZ=wSeVgVW#76Bp#K z5R4;+`5cOchVL}XAP^=PNP-`L+|2Cq%m5rfLlFSL1c8&_boQcg9f>{HT!u@0rI?Gd zD({Jv+W~M^gyTpyuRU|lbc=RGB0|lqg8#^z?I$idDz2JV;yr6Eep5)Vr{u*(mE%CT zvHniIZ1fiThGQSOc3>xy3y-S#m6HXB2)vAc+iLF7bYJUK<3SQBf0)d*h}(lUxr@_ur(Xalo_u?%Arq>7IpzI7b)BwzZmu7c?*3${Zxgg>Gm|); z`E4s$RNYB#`iwW8pBqwAz>(PrwG?ltDk8YmXmuJ4H=!_`@^(}rR|`Az2IYMJ$F%!Z zr_Qd14^|=aYi9!TXWTWUe=N$H?OO`_lr;wzxiTLU;Z_TL#qz6Wd)SG6EMdfk6L}8b zC|w*URUQ*=smV*+IohFZD?7U_w}E;QTVDpn98ji~A`B#XUOS{-oRfT#hHi=ZZV$KF zbT*7Hi-`}>BUH4i(N25j@l`EbDz+0NJO(_@mQtEOC71|UXpP0*F-ZzAjBuCmlaZsR zv%b30-PxOV#hl}+&5E6Fcx8^CIG_DQVG7NvGPlKrH-Eg1(>$$FKdP^`zkWOF%%}E`lNU4Ew(rEA_VCzJ~fBRWTWcrE2pB)$$fE%ntolg#FOm5py%M+?P64Mk%JiLUNSxq zDH%`N20lOmI`1nzFePLlwzYF8+S%Z-Pg~m!lM02kiFd6{?m}irwsNJ-4`W+PrZ>G7 z8an*BQ)QUGj`WN%OW@=DxyqZwMr(5>Q-xpW`nRi!8sr9hv=e2f>i?5u$~2o#Ptm-i zt*TeAaeCrL1Ulj-%_6aUc07)U!}ncA428QxRr6d%lSAKX$OXLTYdx&a3rppGmiZ}iu%hRr zY{P{I`nL0>L08vv7Fc}^b}P~8i!mC%_I8^?R=Vv(;x8}1B9!b|*?Ae4VF`u!_Fl^p zq4{eU!K6p1gq5|pRoomyhO8ahK9pYakLZgyi_y{-EpEq(MK)X*d_43AkKSAEkBR1bdo=;DMV!iUOV&L7RxOc z+#b*`|48kbCXM<8CM79S8P~)V7Fq{dqiDt(gEr>{bp5`Ml?lU;=Q~siF73M@r`z=( z>QYMu+FPb8emRqeJ0%xVfn7#G*T*3fQ&R`EI#jsgxy^~{0^S@-yseb9fAepZNu9tj zxbuRv@KPfi)>ylB^4ncJo~=XNg0q&X0B9?D+Ce$!zvXT4FrZ|!_N5nhi2TI$bw`s3=Z;E@FpsYg2I0kb|liv*V{J?7ogyU z561@thXmq-!j!o|&OccWBoiJN;v1-p0D1l}49WVJ6}%%raUm`htg?!V3aE}%1F;tm zQ5{tMAO64EA^}qWHt6tyz(@cO1SA3MP!a$@o+W=RXOUMHN&W&kwoUK0;K(V}&qM0) z>F#1K^QAXo&V=N?c|Lt_k+xWLNiem!di^pJVd}xYsd0I?J=$AM-^0G;dRE%{s3(=+ z^hR(o{gPD{e6U22+yi~* zqhwLC)e&6pU*nh<*yQL+pO4jX$1xR4xAiV9$6G8mP#6FK$|b?0pxEI=#kk>uaQ-k#@O)QVWJXK^ zZJQ@3S3;fHJmcRc9&Xv8i2&pr!m$~Vdb*R!cr0&~H^jZ#=RCR@_Xt*u869wpjx9fy za@T0#(_*9%wL68Z)MIzvt&P)nd=ewTNW1D=Y1~Drzop2Y;dS7dhsnXJeWbIYr|2ab zI?p4?oO_=sx%TT8=U7E;1fFwGMPkQ`5dz9SiEjDV`5aFr1O&?E5K~Hxu7CNFmAzrT zV2u84y_+YEpotc!HW+mKIhmw)I$J&~l=3?I)`qILt6qn*wZ$w_mAQVMOb9K$E zN>(FzCGC^%Umg!$(_DmcWL8thU{Tl!vjtm=VqK|@*k0+Mby|FO@y!7Yh5{ Date: Fri, 26 Dec 2025 09:34:30 +0900 Subject: [PATCH 09/13] =?UTF-8?q?=EB=B9=84=EB=8F=99=EA=B8=B0=20400?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=ED=95=84=ED=84=B0=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20INBOUND=5FHEADER=20contains=EB=B9=84=EA=B5=90=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20insensitive=EB=A1=9C=20=EB=B3=80=EA=B2=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/filter/AsyncReponseFilter.java | 65 +++++++++++++++++++ .../HttpClient5AdapterFilterFactory.java | 3 + .../filter/HttpClient5AdapterFilterType.java | 1 + .../http/client/filter/JBOBPFilter.java | 45 +++++++++---- .../http/client/filter/KAKAOBankFilter.java | 31 +++++---- .../http/client/filter/KFTCFaceFilter.java | 41 ++++++++---- .../http/client/filter/KFTCP2PFilter.java | 35 ++++++++-- .../http/client/filter/NAVERFinFilter.java | 34 ++++++++-- .../http/client/filter/TOSSBankFilter.java | 26 ++++++-- 9 files changed, 231 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/AsyncReponseFilter.java diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/AsyncReponseFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/AsyncReponseFilter.java new file mode 100644 index 0000000..a381f31 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/AsyncReponseFilter.java @@ -0,0 +1,65 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class AsyncReponseFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String X_TRACE_ID = "partnerTraceId"; + public static final String TRACE_ID = "traceId"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + logger.debug("AsyncReponseFilter] PreFilter Processing Start!!"); + Object returnMessage = message; + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(X_TRACE_ID)) { + filterHeaders.put(X_TRACE_ID, inboundHeaderMap.get(X_TRACE_ID)); + logger.debug("AsyncReponseFilter] Processing Key ["+X_TRACE_ID+"], value ["+inboundHeaderMap.get(X_TRACE_ID)+"]"); + } + } + filterHeaders.setProperty(TRACE_ID, traceId); + logger.debug("AsyncReponseFilter] Processing Key ["+TRACE_ID+"], value ["+traceId+"]"); + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java index db42f8d..72f99ec 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java @@ -45,6 +45,9 @@ public class HttpClient5AdapterFilterFactory { case TOSSBANK: filter = new TOSSBankFilter(); break; + case ASYNCRESPONSE: + filter = new AsyncReponseFilter(); + break; default: filter = classForName(type); if (filter == null) { diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java index 10aeff0..c927220 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java @@ -9,6 +9,7 @@ public enum HttpClient5AdapterFilterType { NAVERFIN, NICECREDIT, TOSSBANK, + ASYNCRESPONSE, UNKNOWN; public static HttpClient5AdapterFilterType getValue(String type) { diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java index 770e23c..7f72d00 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java @@ -1,7 +1,9 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; import java.util.Map.Entry; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import org.apache.commons.lang3.StringUtils; @@ -72,20 +74,39 @@ public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceK tempProp.put("FILTERHEADER", filterHeaders); } try { + String obpPartnerCode = "000000-00"; Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null){ - for (Entry e : inboundHeader.entrySet()) { - String key = (String) e.getKey(); - String value = (String) e.getValue(); - - if (StringUtils.equalsIgnoreCase(key, X_OBP_PARTNERCODE)) { - filterHeaders.setProperty(key, value); - logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+value+"]"); - } - if (logger.isDebugEnabled()) { - logger.debug("Request Header :" + key + "=[" + value + "]"); - } + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(X_OBP_PARTNERCODE)) { + filterHeaders.put(X_OBP_PARTNERCODE, inboundHeaderMap.get(X_OBP_PARTNERCODE)); + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+inboundHeaderMap.get(X_OBP_PARTNERCODE)+"]"); + } else { + filterHeaders.put(X_OBP_PARTNERCODE, obpPartnerCode); + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+obpPartnerCode+"]"); } + } else { + filterHeaders.put(X_OBP_PARTNERCODE, obpPartnerCode); + logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+obpPartnerCode+"]"); +// if (inboundHeader != null){ +// for (Entry e : inboundHeader.entrySet()) { +// String key = (String) e.getKey(); +// String value = (String) e.getValue(); +// +// if (StringUtils.equalsIgnoreCase(key, X_OBP_PARTNERCODE)) { +// filterHeaders.setProperty(key, value); +// logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+value+"]"); +// } +// if (logger.isDebugEnabled()) { +// logger.debug("Request Header :" + key + "=[" + value + "]"); +// } +// } } String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java index 7adac57..1228f34 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java @@ -2,7 +2,9 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.common.property.PropGroupVO; @@ -48,29 +50,36 @@ public class KAKAOBankFilter implements HttpClientAdapterFilter, HttpAdapterServ } try { Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null) { - if (inboundHeader.containsKey(X_KKB_PARTNER_CODE)) { - filterHeaders.put(X_KKB_PARTNER_CODE, inboundHeader.get(X_KKB_PARTNER_CODE)); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(X_KKB_PARTNER_CODE)) { + filterHeaders.put(X_KKB_PARTNER_CODE, inboundHeaderMap.get(X_KKB_PARTNER_CODE)); } else { filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode); } - if (inboundHeader.containsKey(X_KKB_API_NAME)) { - filterHeaders.put(X_KKB_API_NAME, inboundHeader.get(X_KKB_API_NAME)); + if (inboundHeaderMap.containsKey(X_KKB_API_NAME)) { + filterHeaders.put(X_KKB_API_NAME, inboundHeaderMap.get(X_KKB_API_NAME)); } else { filterHeaders.put(X_KKB_API_NAME, apiName); } - if (inboundHeader.containsKey(X_KKB_API_TX_ID)) { - filterHeaders.put(X_KKB_API_TX_ID, inboundHeader.get(X_KKB_API_TX_ID)); + if (inboundHeaderMap.containsKey(X_KKB_API_TX_ID)) { + filterHeaders.put(X_KKB_API_TX_ID, inboundHeaderMap.get(X_KKB_API_TX_ID)); } else { filterHeaders.put(X_KKB_API_TX_ID, apiTxId); } - if (inboundHeader.containsKey(X_KKB_TX_TIME)) { - filterHeaders.put(X_KKB_TX_TIME, inboundHeader.get(X_KKB_TX_TIME)); + if (inboundHeaderMap.containsKey(X_KKB_TX_TIME)) { + filterHeaders.put(X_KKB_TX_TIME, inboundHeaderMap.get(X_KKB_TX_TIME)); } else { filterHeaders.put(X_KKB_TX_TIME, txTime); } - if (inboundHeader.containsKey(X_KKB_CMPR_MGMT_NO)) { - filterHeaders.put(X_KKB_CMPR_MGMT_NO, inboundHeader.get(X_KKB_CMPR_MGMT_NO)); + if (inboundHeaderMap.containsKey(X_KKB_CMPR_MGMT_NO)) { + filterHeaders.put(X_KKB_CMPR_MGMT_NO, inboundHeaderMap.get(X_KKB_CMPR_MGMT_NO)); } else { filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); } diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java index 35a7698..5ab6f2c 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java @@ -3,7 +3,9 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; import java.util.Map.Entry; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; @@ -65,19 +67,34 @@ public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServi } try { Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null && inboundHeader.containsKey(H_CLIENT_ID)) { - for (Entry e : inboundHeader.entrySet()) { - String key = (String) e.getKey(); - String value = (String) e.getValue(); - - if (StringUtils.equalsIgnoreCase(key, H_CLIENT_ID)) { - filterHeaders.setProperty(key, value); - logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+value+"]"); - } - if (logger.isDebugEnabled()) { - logger.debug("Request Header :" + key + "=[" + value + "]"); - } + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(H_CLIENT_ID)) { + filterHeaders.put(H_CLIENT_ID, inboundHeaderMap.get(H_CLIENT_ID)); + logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+inboundHeaderMap.get(H_CLIENT_ID)+"]"); + } else { + filterHeaders.put(H_CLIENT_ID, clientId); + logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+clientId+"]"); } +// if (inboundHeader != null && inboundHeader.containsKey(H_CLIENT_ID)) { +// for (Entry e : inboundHeader.entrySet()) { +// String key = (String) e.getKey(); +// String value = (String) e.getValue(); +// +// if (StringUtils.equalsIgnoreCase(key, H_CLIENT_ID)) { +// filterHeaders.setProperty(key, value); +// logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+value+"]"); +// } +// if (logger.isDebugEnabled()) { +// logger.debug("Request Header :" + key + "=[" + value + "]"); +// } +// } } else { filterHeaders.setProperty(H_CLIENT_ID, clientId); logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+clientId+"]"); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java index de4affe..0434270 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java @@ -2,7 +2,9 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import org.apache.commons.lang3.RandomStringUtils; @@ -44,19 +46,40 @@ public class KFTCP2PFilter implements HttpClientAdapterFilter, HttpAdapterServic } try { Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null) { - if (inboundHeader.containsKey(H_TRX_NO)) { - filterHeaders.put(H_TRX_NO, inboundHeader.get(H_TRX_NO)); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(H_TRX_NO)) { + filterHeaders.put(H_TRX_NO, inboundHeaderMap.get(H_TRX_NO)); + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+inboundHeaderMap.get(H_TRX_NO)+"]"); } else { filterHeaders.put(H_TRX_NO, apiTrxNo); + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+apiTrxNo+"]"); } - if (inboundHeader.containsKey(H_TRX_DTM)) { - filterHeaders.put(H_TRX_DTM, inboundHeader.get(H_TRX_DTM)); + if (inboundHeaderMap.containsKey(H_TRX_DTM)) { + filterHeaders.put(H_TRX_DTM, inboundHeaderMap.get(H_TRX_DTM)); + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+inboundHeaderMap.get(H_TRX_DTM)+"]"); } else { filterHeaders.put(H_TRX_DTM, apiTrxDtm); + logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+apiTrxDtm+"]"); } +// if (inboundHeader != null) { +// if (inboundHeader.containsKey(H_TRX_NO)) { +// filterHeaders.put(H_TRX_NO, inboundHeader.get(H_TRX_NO)); +// } else { +// filterHeaders.put(H_TRX_NO, apiTrxNo); +// } +// if (inboundHeader.containsKey(H_TRX_DTM)) { +// filterHeaders.put(H_TRX_DTM, inboundHeader.get(H_TRX_DTM)); +// } else { +// filterHeaders.put(H_TRX_DTM, apiTrxDtm); +// } } else { -// filterHeaders.setProperty(H_TRX_NO, apiTrxNo); filterHeaders.put(H_TRX_NO, apiTrxNo); filterHeaders.put(H_TRX_DTM, apiTrxDtm); } diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java index 186b79e..390426b 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java @@ -1,6 +1,8 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.common.property.PropGroupVO; @@ -38,17 +40,39 @@ public class NAVERFinFilter implements HttpClientAdapterFilter, HttpAdapterServi } try { Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null) { - if (inboundHeader.containsKey(X_PARTNER_ID)) { - filterHeaders.put(X_PARTNER_ID, inboundHeader.get(X_PARTNER_ID)); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(X_PARTNER_ID)) { + filterHeaders.put(X_PARTNER_ID, inboundHeaderMap.get(X_PARTNER_ID)); + logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+inboundHeaderMap.get(X_PARTNER_ID)+"]"); } else { filterHeaders.put(X_PARTNER_ID, partnerID); + logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+partnerID+"]"); } - if (inboundHeader.containsKey(X_FINTECH_ID)) { - filterHeaders.put(X_FINTECH_ID, inboundHeader.get(X_FINTECH_ID)); + if (inboundHeaderMap.containsKey(X_FINTECH_ID)) { + filterHeaders.put(X_FINTECH_ID, inboundHeaderMap.get(X_FINTECH_ID)); + logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+inboundHeaderMap.get(X_FINTECH_ID)+"]"); } else { filterHeaders.put(X_FINTECH_ID, fintechId); + logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+fintechId+"]"); } +// if (inboundHeader != null) { +// if (inboundHeader.containsKey(X_PARTNER_ID)) { +// filterHeaders.put(X_PARTNER_ID, inboundHeader.get(X_PARTNER_ID)); +// } else { +// filterHeaders.put(X_PARTNER_ID, partnerID); +// } +// if (inboundHeader.containsKey(X_FINTECH_ID)) { +// filterHeaders.put(X_FINTECH_ID, inboundHeader.get(X_FINTECH_ID)); +// } else { +// filterHeaders.put(X_FINTECH_ID, fintechId); +// } } else { filterHeaders.put(X_PARTNER_ID, partnerID); filterHeaders.put(X_FINTECH_ID, fintechId); diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java index c325da3..c052d09 100644 --- a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java @@ -1,6 +1,8 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; +import java.util.Map; import java.util.Properties; +import java.util.TreeMap; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.common.TransactionContextKeys; @@ -37,17 +39,33 @@ public class TOSSBankFilter implements HttpClientAdapterFilter, HttpAdapterServi } try { Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); - if (inboundHeader != null) { - if (inboundHeader.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) { - filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeader.get(X_TOSSBANK_LOAN_TRACE_ID)); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + // Properties 내용을 모두 복사 + for (String name : inboundHeader.stringPropertyNames()) { + inboundHeaderMap.put(name, inboundHeader.getProperty(name)); + } + + if (!inboundHeaderMap.isEmpty()) { + if (inboundHeaderMap.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) { + filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeaderMap.get(X_TOSSBANK_LOAN_TRACE_ID)); + logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+inboundHeaderMap.get(X_TOSSBANK_LOAN_TRACE_ID)+"]"); } else { filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, traceId); + logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+traceId+"]"); } +// if (inboundHeader != null) { +// if (inboundHeader.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) { +// filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeader.get(X_TOSSBANK_LOAN_TRACE_ID)); +// } else { +// filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, traceId); +// } } else { /* APIM 거래추적자 */ filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId); + logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+traceId+"]"); } - logger.debug("NAVERFinFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+filterHeaders.getProperty(X_TOSSBANK_LOAN_TRACE_ID)+"]"); + logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+filterHeaders.getProperty(X_TOSSBANK_LOAN_TRACE_ID)+"]"); } catch (Exception e) { logger.error(e.getMessage()); From 82d00f203eda9bfc049bd33921a801e0d05d242f Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Sat, 27 Dec 2025 13:40:32 +0900 Subject: [PATCH 10/13] =?UTF-8?q?KJBank=EC=9A=A9=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89/=EA=B2=80=EC=A6=9D=EC=9A=A9=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=EC=9D=B8=EC=A6=9D=ED=82=A4(=EC=9A=B4=EC=98=81?= =?UTF-8?q?=ED=99=98=EA=B2=BD)=20=ED=8C=8C=EC=9D=BC=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../certificate/product/KJBank-oAuth-prod.jks | Bin 2269 -> 2788 bytes .../certificate/product/KJBank-oAuth-prod.pub | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/certificate/product/KJBank-oAuth-prod.jks b/src/main/resources/certificate/product/KJBank-oAuth-prod.jks index f0cabb6ba1e9695df8619e585c9d3a8d285893ef..f8af8d55e35fb612e6e8c10779acec54c95285c3 100644 GIT binary patch literal 2788 zcma)8X*d*&7M>Y1V;v)AOkwO&*=D4u?8}U$vQ83(LYA4bi%A&LCE53kWrXPyV=2p& zEa98TQnHO~$?hXt)^y$H-ly-mzwZ5Uo^#H-oS*M=Fch8%5Rd~y;faNEpNck)-hu%+ zf%z03GMK^>bO`%lC=lj98(`j53Mwfu~KIvSl?35 zeTG!Us?O`(Ahy110ctavvm_KdCupn=$jyn~YY07fSSbY+owyF-FcQUcR z8j8THeJhuWe@GmFcP@{KaNga?_dBP{oCqS5!v<*Y05@F|2)< zw1#Jy<;!B|p2K*fvwN`Vl=npi}VYW|nsLhoeG z7rA*gJdN1$od&?l*Tz89ur+0gn8I;p<&*8wme=H``Hs++X2yrn1yiHC@Ml*Ohm>sfm0b4#EPCNzN z8=i~WHF0msvsvprmkjcbihSzSRdb#y!Hn zrlISCL(ci;aqqJyKeiJ#Ps7tZ#4qVVi&M-PyWhoT{`}lYWR%EBYF@)$?qwSHXYq8=96Ref`yA~7a<4AY}9`QADLV2S00WJk<^Y%#5c+&o* z=?|vx_~Ay?oVtprb8EBSaKZ+)Jj)<2W?zvUzLKN58^RUkCEm1C_LyAg*(G!ALhbgW zv+)B$(aM;$bK6{4+wuf-alOB+pZ_D>ocTikUlGX<(h@9Q#`&lZ4K~hbwq|O$K2{(u zpNF5#Kd?87bBGGRVo9TFhr5C4Plsoxtl7bcJ$0-30qdr5^c>q-NYGI|I5tnpIgYCJ zlMpa2kv*DxGN(1_Doxoxkn##bXf|+-?KUM!<7A1FYNO`VL}l{QSngcxE$_(v9tQsX ziQFER?X#Q$<(i;I!hlR?u0}P@FX$2%XWojBB@ZHHzl3u+3L0OR%OTEkJPDZv)rS&F9)GM0SU8)371 zp786qqLtRzGf{kz!)Q^*Ca2~2e1eBofu3li#MkzzCd7vaCCHnnZ^p;z^U8g1HP>Pd zh~b2K)iE(JyrD3so=p7Ugw&n;ja0Jj{R1sh#K^kg^Uc&1OYx%hZ%NA9KiFPlw#{7? z>LKU-uop4%zvGe{ffW%y3h)AW0&W7F0e223CBWUoDFEOPaK}jfEkt4wU_l!XlB*R1NK#KV}SoG2RNh01dfo-&KqJ`>4KSODCTY#YkX0ks?) zr)_kK>=IjkzBzCes_0!nbb6GY({(?V1}F!4^fqYtCe)2d>;Z@RK@2;!j??3iBX|c= zoeTM{z(YFI0e*XKH0D!Cuoqa?`S=p*i+_i+{p62Z@5sB&3G`0tN{4wxp+eATWM7^y z+^G2&7Fm$Ll3p*%Hz7b&^(4>aw7>WzL@+vW5|^@AQ3OYUHR~k!RQYwS4@l zPs15G=JOY`Gx~yle3XXuimmv%>}FjL+$=-bXrf;P41VFf9e~^fxkO8!@O)*NMALoZ zmPi6?@yLlA-&^C`kGH+AENb8=B)aaa-hjCC>4Sxwn~!&0fWNzH|K>N7?i#rqRzp-5 zx*Ny5MJ$a@1{r>b&AsILV}3NuC)5&vK}q+8jD~!ftQ~V=JqoO;HKS~IFtEDMXgGP3 z$n!{nJs<=yMD5A#T2QV#bde519aO&5@vfOkJmVrz0VSXi)_*Q)Ws{3YR4VW9$X z-DN3u_>6bhp^DOKof8Gqg`u8fF)L&B&%@m8ol`{zCHtK;bci(p&zg_wjBEZw0~FaO zw_By3sM`D}fh87wVuZK-=-Bw$yHz>V(6;Pbzs4Zk9<0w$^RNxrD)DV81^< z5D)?YOS1l4fviUdJxcq_0d;cbHZrirkj&+SOG>R*(AHdNGzBA0?S1Y#m;D1aNP;I6 P*O;RB=o6;b~LWugbG literal 2269 zcmc(g={wX77sux}Gxl|irLkp6G6p}(*s_#l$r9PKj?CD%GPWXyN47GSkY%`$>}5|W z*-K$cB1^U@%Y>1Xq&(`ybKU>J^Wwbte9w7tuJ1Y5IltF`uR|aZ=wSeVgVW#76Bp#K z5R4;+`5cOchVL}XAP^=PNP-`L+|2Cq%m5rfLlFSL1c8&_boQcg9f>{HT!u@0rI?Gd zD({Jv+W~M^gyTpyuRU|lbc=RGB0|lqg8#^z?I$idDz2JV;yr6Eep5)Vr{u*(mE%CT zvHniIZ1fiThGQSOc3>xy3y-S#m6HXB2)vAc+iLF7bYJUK<3SQBf0)d*h}(lUxr@_ur(Xalo_u?%Arq>7IpzI7b)BwzZmu7c?*3${Zxgg>Gm|); z`E4s$RNYB#`iwW8pBqwAz>(PrwG?ltDk8YmXmuJ4H=!_`@^(}rR|`Az2IYMJ$F%!Z zr_Qd14^|=aYi9!TXWTWUe=N$H?OO`_lr;wzxiTLU;Z_TL#qz6Wd)SG6EMdfk6L}8b zC|w*URUQ*=smV*+IohFZD?7U_w}E;QTVDpn98ji~A`B#XUOS{-oRfT#hHi=ZZV$KF zbT*7Hi-`}>BUH4i(N25j@l`EbDz+0NJO(_@mQtEOC71|UXpP0*F-ZzAjBuCmlaZsR zv%b30-PxOV#hl}+&5E6Fcx8^CIG_DQVG7NvGPlKrH-Eg1(>$$FKdP^`zkWOF%%}E`lNU4Ew(rEA_VCzJ~fBRWTWcrE2pB)$$fE%ntolg#FOm5py%M+?P64Mk%JiLUNSxq zDH%`N20lOmI`1nzFePLlwzYF8+S%Z-Pg~m!lM02kiFd6{?m}irwsNJ-4`W+PrZ>G7 z8an*BQ)QUGj`WN%OW@=DxyqZwMr(5>Q-xpW`nRi!8sr9hv=e2f>i?5u$~2o#Ptm-i zt*TeAaeCrL1Ulj-%_6aUc07)U!}ncA428QxRr6d%lSAKX$OXLTYdx&a3rppGmiZ}iu%hRr zY{P{I`nL0>L08vv7Fc}^b}P~8i!mC%_I8^?R=Vv(;x8}1B9!b|*?Ae4VF`u!_Fl^p zq4{eU!K6p1gq5|pRoomyhO8ahK9pYakLZgyi_y{-EpEq(MK)X*d_43AkKSAEkBR1bdo=;DMV!iUOV&L7RxOc z+#b*`|48kbCXM<8CM79S8P~)V7Fq{dqiDt(gEr>{bp5`Ml?lU;=Q~siF73M@r`z=( z>QYMu+FPb8emRqeJ0%xVfn7#G*T*3fQ&R`EI#jsgxy^~{0^S@-yseb9fAepZNu9tj zxbuRv@KPfi)>ylB^4ncJo~=XNg0q&X0B9?D+Ce$!zvXT4FrZ|!_N5nhi2TI$bw`s3=Z;E@FpsYg2I0kb|liv*V{J?7ogyU z561@thXmq-!j!o|&OccWBoiJN;v1-p0D1l}49WVJ6}%%raUm`htg?!V3aE}%1F;tm zQ5{tMAO64EA^}qWHt6tyz(@cO1SA3MP!a$@o+W=RXOUMHN&W&kwoUK0;K(V}&qM0) z>F#1K^QAXo&V=N?c|Lt_k+xWLNiem!di^pJVd}xYsd0I?J=$AM-^0G;dRE%{s3(=+ z^hR(o{gPD{e6U22+yi~* zqhwLC)e&6pU*nh<*yQL+pO4jX$1xR4xAiV9$6G8mP#6FK$|b?0pxEI=#kk>uaQ-k#@O)QVWJXK^ zZJQ@3S3;fHJmcRc9&Xv8i2&pr!m$~Vdb*R!cr0&~H^jZ#=RCR@_Xt*u869wpjx9fy za@T0#(_*9%wL68Z)MIzvt&P)nd=ewTNW1D=Y1~Drzop2Y;dS7dhsnXJeWbIYr|2ab zI?p4?oO_=sx%TT8=U7E;1fFwGMPkQ`5dz9SiEjDV`5aFr1O&?E5K~Hxu7CNFmAzrT zV2u84y_+YEpotc!HW+mKIhmw)I$J&~l=3?I)`qILt6qn*wZ$w_mAQVMOb9K$E zN>(FzCGC^%Umg!$(_DmcWL8thU{Tl!vjtm=VqK|@*k0+Mby|FO@y!7Yh5{ Date: Tue, 30 Dec 2025 10:24:30 +0900 Subject: [PATCH 11/13] =?UTF-8?q?=EC=9C=A0=EB=9F=89=EC=A0=9C=EC=96=B4=20FI?= =?UTF-8?q?X,=20=ED=91=9C=EC=A4=80=EC=A0=84=EB=AC=B8=20FIX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StandardMessageCoordinatorKJB.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/eactive/eai/custom/message/StandardMessageCoordinatorKJB.java b/src/main/java/com/eactive/eai/custom/message/StandardMessageCoordinatorKJB.java index cfe435e..437fa14 100644 --- a/src/main/java/com/eactive/eai/custom/message/StandardMessageCoordinatorKJB.java +++ b/src/main/java/com/eactive/eai/custom/message/StandardMessageCoordinatorKJB.java @@ -19,12 +19,12 @@ import com.ext.eai.common.stdmessage.STDMessageKeys; import org.apache.commons.lang.StringUtils; import java.net.UnknownHostException; +import java.util.LinkedHashMap; import java.util.Properties; public class StandardMessageCoordinatorKJB extends DefaultStandardMessageCoordinator { private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT); - public static final String DEFAULT_LENGTH = "00000745"; private static final String MESSAGE_PART = "Message"; private static final String MESSAGE_PART_HEADER_PART = "Message.Msg_Header"; private static final String MESSAGE_PART_MSG_HEDR_KNCD = "Message.Msg_Header.MSG_HEDR_KNCD"; @@ -32,6 +32,7 @@ public class StandardMessageCoordinatorKJB extends DefaultStandardMessageCoordin private static final String MESSAGE_PART_BODY_PART = "Message.Msg_Body"; private static final String MESSAGE_PART_OUTPUT_MSG_CD = "Message.Msg_Body.OUTPUT_MSG_CD"; private static final String MESSAGE_PART_OUTPUT_MSG_CTNT = "Message.Msg_Body.OUTPUT_MSG_CTNT"; + private static final String MESSAGE_PART_OUTPUT_MSG_GRID = "Message.Msg_Body.Output_Msg_Grid"; private static final String COMMON_PART_GROUP_CMD_CD = "Common.Service_info.GROUP_CMP_CD"; private static final String COMMON_PART_OTSD_CHNL_INST_CD = "Common.Service_info.OTSD_CHNL_INST_CD"; private static final String DATA_HEADER_DATA_HEDR_LEN = "Data_Part.Data_Header.DATA_HEDR_LEN"; @@ -134,11 +135,17 @@ public class StandardMessageCoordinatorKJB extends DefaultStandardMessageCoordin mapper.setErrorCode(standardMessage, siteErrCode); standardMessage.setData(MESSAGE_PART_MSG_HEDR_KNCD, "EM"); - standardMessage.setData(MESSAGE_PART_MSG_HEDR_LEN, DEFAULT_LENGTH); standardMessage.setData(MESSAGE_PART_OUTPUT_MSG_CD, siteErrCode); + StandardItem msgGrid = standardMessage.findItem(MESSAGE_PART_OUTPUT_MSG_GRID); + LinkedHashMap msgGridFirstChilds = msgGrid.getArrayChilds(0, true); + msgGridFirstChilds.get("OUTPUT_MSG_CD").setValue(siteErrCode); + msgGridFirstChilds.get("OUTPUT_MSG_CTNT").setValue(siteErrMessage); //Message.Msg_Body.OUTPUT_MSG_CTNT mapper.setErrorMsg(standardMessage, siteErrMessage); - + int len = standardMessage.getBytesDataLengthForPath(MESSAGE_PART_BODY_PART); + String lenStr = StringUtils.leftPad(String.valueOf(len), 8, '0'); + standardMessage.setData(MESSAGE_PART_MSG_HEDR_LEN, lenStr); + return false; } @@ -155,9 +162,15 @@ public class StandardMessageCoordinatorKJB extends DefaultStandardMessageCoordin messageBodyPart.setSize(1); responseMessage.setData(MESSAGE_PART_MSG_HEDR_KNCD, "NM"); - responseMessage.setData(MESSAGE_PART_MSG_HEDR_LEN, DEFAULT_LENGTH); responseMessage.setData(MESSAGE_PART_OUTPUT_MSG_CD, "100000 "); - responseMessage.setData(MESSAGE_PART_OUTPUT_MSG_CTNT, "정상처리 되었습니다."); + responseMessage.setData(MESSAGE_PART_OUTPUT_MSG_CTNT, "정상처리"); + StandardItem msgGrid = responseMessage.findItem(MESSAGE_PART_OUTPUT_MSG_GRID); + LinkedHashMap msgGridFirstChilds = msgGrid.getArrayChilds(0, true); + msgGridFirstChilds.get("OUTPUT_MSG_CD").setValue("100000 "); + msgGridFirstChilds.get("OUTPUT_MSG_CTNT").setValue("정상처리"); + int len = responseMessage.getBytesDataLengthForPath(MESSAGE_PART_BODY_PART); + String lenStr = StringUtils.leftPad(String.valueOf(len), 8, '0'); + responseMessage.setData(MESSAGE_PART_MSG_HEDR_LEN, lenStr); } public String getSysOprtEnvDvcd(EAIServerManager eaiServerManager) { From 2b4109c28652ac0c12d143ae4310f2f470f90496 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Tue, 30 Dec 2025 11:27:45 +0900 Subject: [PATCH 12/13] =?UTF-8?q?=EB=A7=A4=ED=95=91=EB=B3=80=ED=99=98?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80(KJB=20=EC=9D=B4?= =?UTF-8?q?=EC=83=81=EC=9A=B1D=20=EC=9A=94=EC=B2=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/userdefined/BooleanToFlag.java | 37 ++++++++++++ .../function/userdefined/ContainsString.java | 59 +++++++++++++++++++ .../function/userdefined/FlagToBoolean.java | 37 ++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 src/main/java/com/eactive/eai/custom/transformer/function/userdefined/BooleanToFlag.java create mode 100644 src/main/java/com/eactive/eai/custom/transformer/function/userdefined/ContainsString.java create mode 100644 src/main/java/com/eactive/eai/custom/transformer/function/userdefined/FlagToBoolean.java diff --git a/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/BooleanToFlag.java b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/BooleanToFlag.java new file mode 100644 index 0000000..6c3a271 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/BooleanToFlag.java @@ -0,0 +1,37 @@ +package com.eactive.eai.custom.transformer.function.userdefined; + +import java.util.Stack; + +import org.apache.commons.lang.StringUtils; +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; + + +public class BooleanToFlag extends PostfixMathCommand { + public BooleanToFlag() { + numberOfParameters = -1; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + Object p1 = inStack.pop(); + + String strInStack = ""; + String resultStr = ""; + if (p1 instanceof byte[]) { + strInStack = new String((byte[]) p1); + } else if (p1 instanceof String) { + strInStack = (String) p1; + } else { + throw new ParseException("Invalid parameter type, p1 is not string/bytes"); + } + + if (StringUtils.equalsIgnoreCase(strInStack, "TRUE")) { + resultStr = "Y"; + } else { + resultStr = "N"; + } + inStack.push(resultStr); + } +} diff --git a/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/ContainsString.java b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/ContainsString.java new file mode 100644 index 0000000..0829b91 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/ContainsString.java @@ -0,0 +1,59 @@ +package com.eactive.eai.custom.transformer.function.userdefined; + +import java.util.Stack; + +import org.apache.commons.lang.StringUtils; +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; + + +public class ContainsString extends PostfixMathCommand { + public ContainsString() { + numberOfParameters = -1; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + if (curNumberOfParameters == 4) { + Object p4 = inStack.pop(); + if (p4 instanceof String) { + String falseVal = (String) p4; + Object p3 = inStack.pop(); + if (p3 instanceof String) { + String trueVal = (String) p3; + Object p2 = inStack.pop(); + if (p2 instanceof String) { + String str = (String) p2; + Object p1 = inStack.pop(); + if (p1 instanceof String) { + String originStr = (String) p1; + if (StringUtils.contains(originStr, str)) { + inStack.push(trueVal); + } else { + inStack.push(falseVal); + } + } else if (p1 instanceof byte[]) { + String originStr = new String((byte[]) p1); + if (StringUtils.contains(originStr, str)) { + inStack.push(trueVal); + } else { + inStack.push(falseVal); + } + } else { + throw new ParseException("Invalid parameter type, p1 is not string/bytes"); + } + } else { + throw new ParseException("Invalid parameter type, p2 is not String"); + } + } else { + throw new ParseException("Invalid parameter type, p3 is not String"); + } + } else { + throw new ParseException("Invalid parameter type, p4 is String"); + } + } else { + throw new ParseException("invalid parameter count : " + curNumberOfParameters + " - parameter count must be 4"); + } + } +} diff --git a/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/FlagToBoolean.java b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/FlagToBoolean.java new file mode 100644 index 0000000..e42460b --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/FlagToBoolean.java @@ -0,0 +1,37 @@ +package com.eactive.eai.custom.transformer.function.userdefined; + +import java.util.Stack; + +import org.apache.commons.lang.StringUtils; +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommand; + + +public class FlagToBoolean extends PostfixMathCommand { + public FlagToBoolean() { + numberOfParameters = -1; + } + + public void run(Stack inStack) throws ParseException { + checkStack(inStack); + + Object p1 = inStack.pop(); + + String strInStack = ""; + String resultStr = ""; + if (p1 instanceof byte[]) { + strInStack = new String((byte[]) p1); + } else if (p1 instanceof String) { + strInStack = (String) p1; + } else { + throw new ParseException("Invalid parameter type, p1 is not string/bytes"); + } + + if (StringUtils.equalsIgnoreCase(strInStack, "Y")) { + resultStr = "True"; + } else { + resultStr = "False"; + } + inStack.push(resultStr); + } +} From 332797bacb05b45138a3f2ca36aca11642a2b499 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Tue, 30 Dec 2025 14:03:19 +0900 Subject: [PATCH 13/13] =?UTF-8?q?verifyClient=EC=97=90=EC=84=9C=20client?= =?UTF-8?q?=20secret=20=EA=B2=80=EC=A6=9D=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/KjbMGOAuth2Controller.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eactive/eai/authserver/custom/KjbMGOAuth2Controller.java b/src/main/java/com/eactive/eai/authserver/custom/KjbMGOAuth2Controller.java index 00781b8..9f376ea 100644 --- a/src/main/java/com/eactive/eai/authserver/custom/KjbMGOAuth2Controller.java +++ b/src/main/java/com/eactive/eai/authserver/custom/KjbMGOAuth2Controller.java @@ -92,7 +92,7 @@ public class KjbMGOAuth2Controller { } ClientDetails clientDetails = OAuth2Manager.getInstance().getClientDeatilsStore().get(clientId); - verifyClient(clientDetails, clientId, scopeSet); + verifyClient(clientDetails, clientId, clientSecret, scopeSet); String traceId = UUID.randomUUID().toString().replace("-", ""); response.setHeader(HEADER_TRACEID, traceId); @@ -139,7 +139,7 @@ public class KjbMGOAuth2Controller { } } - private void verifyClient(ClientDetails clientDetails, String clientId, Set scopeSet) + private void verifyClient(ClientDetails clientDetails, String clientId, String clientSecret, Set scopeSet) throws JwtAuthException { if (StringUtils.isBlank(clientId)) { @@ -148,13 +148,24 @@ public class KjbMGOAuth2Controller { "Invalid Mandatory Field {client_id}"); } - if (clientDetails == null) { throw new JwtAuthException( String.format("%d%s%s", HttpStatus.UNAUTHORIZED.value(), SERVICE_CODE_ACCESS_TOKEN, "00"), "Unauthorized. [client not found]"); } + if (StringUtils.isBlank(clientSecret)) { + throw new JwtAuthException( + String.format("%d%s%s", HttpStatus.BAD_REQUEST.value(), SERVICE_CODE_ACCESS_TOKEN, "02"), + "Invalid Mandatory Field {client_secret}"); + } + + if (StringUtils.equals(clientDetails.getClientSecret(), clientSecret)) { + throw new JwtAuthException( + String.format("%d%s%s", HttpStatus.UNAUTHORIZED.value(), SERVICE_CODE_ACCESS_TOKEN, "00"), + "Unauthorized. [Bad client credentials(Client Secret is not match)]"); + } + if (scopeSet.isEmpty()) { throw new JwtAuthException( String.format("%d%s%s", HttpStatus.BAD_REQUEST.value(), SERVICE_CODE_ACCESS_TOKEN, "02"),