From 77597b4b572825af56ec6d0a1f4df3ab54233d99 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Wed, 14 Jan 2026 08:37:02 +0900 Subject: [PATCH 01/10] =?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=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/certificate/KJBank-oAuth-dev.jks | Bin 2772 -> 0 bytes .../resources/certificate/KJBank-oAuth-dev.pub | 9 --------- .../resources/certificate/kjbank-oauth-dev.jks | Bin 0 -> 2282 bytes .../resources/certificate/kjbank-oauth-dev.pub | 9 +++++++++ .../certificate/product/KJBank-oAuth-prod.jks | Bin 2788 -> 0 bytes .../certificate/product/KJBank-oAuth-prod.pub | 9 --------- .../certificate/product/kjbank-oauth-prod.jks | Bin 0 -> 2282 bytes .../certificate/product/kjbank-oauth-prod.pub | 9 +++++++++ 8 files changed, 18 insertions(+), 18 deletions(-) delete mode 100644 src/main/resources/certificate/KJBank-oAuth-dev.jks delete mode 100644 src/main/resources/certificate/KJBank-oAuth-dev.pub create mode 100644 src/main/resources/certificate/kjbank-oauth-dev.jks create mode 100644 src/main/resources/certificate/kjbank-oauth-dev.pub delete mode 100644 src/main/resources/certificate/product/KJBank-oAuth-prod.jks delete mode 100644 src/main/resources/certificate/product/KJBank-oAuth-prod.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 deleted file mode 100644 index ec007ca4062e073dd336293e427e582f45413120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2772 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 diff --git a/src/main/resources/certificate/KJBank-oAuth-dev.pub b/src/main/resources/certificate/KJBank-oAuth-dev.pub deleted file mode 100644 index ef63b00..0000000 --- a/src/main/resources/certificate/KJBank-oAuth-dev.pub +++ /dev/null @@ -1,9 +0,0 @@ ------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/kjbank-oauth-dev.jks b/src/main/resources/certificate/kjbank-oauth-dev.jks new file mode 100644 index 0000000000000000000000000000000000000000..53f814ce5d444fa9d96818d1027371637b7fb012 GIT binary patch literal 2282 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 P*O;RB=o6;b~LWugbG diff --git a/src/main/resources/certificate/product/KJBank-oAuth-prod.pub b/src/main/resources/certificate/product/KJBank-oAuth-prod.pub deleted file mode 100644 index 837a236..0000000 --- a/src/main/resources/certificate/product/KJBank-oAuth-prod.pub +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8M6NO6KfKRTwwOfZ/slx -fT/4vPzr1zXvgTHoVq/dyoCk8OeVS0OOJXln7ZqDPkKSlfd1X1fdDaEOfLJXfvPC -Hz7AOTBdr1/Y+Ro4slflO8d9/HbNkUZQTsbS/JqnpD20isP+sSJXHVOq5zEa4bbC -tGcpDIwoOIWqoCAA++jUSKhMZEiag5hWKUBi3wpLLjHiKtk9NZxvfCJO6GMJpN1c -O37cnudSan+oDGn3Twb579pK+gG3UZejQABhrqkv63MhMLrl74tXbHL9HX9shJjQ -zq8SQn2k/RbwLVE+USuDmN8BZkVmtQZRirr3d8yT+BlpgodeqMX8PYcztV+4VTvl -swIDAQAB ------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..1a62bdefa6e3118d12fea2c66a24764482bdc0e5 GIT binary patch literal 2282 zcmc&#XIB%55=|osfzW~w=^Z5mlF&s(kX{s(jvxVI2uNE9prIR@BE<*-(gcGwKB|H! z7OIO>sa7-r0U<$DN)~YAp7+k#fABuchq*H!=G>XNcV~HL82|u)1OfafM8iS@i4kGg zNFp^hL;zlUII1)X00;qa>5wg)7!-kl0wF*hkR%W&1c0PN=J$4DMP0RWA=8a6UFxTu zNB!VKZuH88imHuL%NBnZ9{fP8-nb}Jyri%%wNn|rD^uxyp6y1TLqsLasJFezUoI$L zW5q#9;p)c*SyLm^bHVkxW3ZdmnOiNGnD^6b0hn@ONko=6JHZZLKl;QOZ#mESq!99pWHi% zKPLaOW53=HTx2Z8li`Id^l{N)HVs|vH$rOSo8!w8@v`<3*}ncSyhb;#Oln|M0~nZ^ zD+Swa+DCOVyZe#vND1uWJX_u(%@eae8%{2CbZ}mgeKS?};wob+1F7vvVCqX`6$7SB zXJ8?xQxkKG(e{nrUUPliXw_uqo1k&$e9swQN2h&VmKT^mdyoTaEtdTD;3gyi0z-5! zmyBG>9JX~hFjj-N-17>;oTgF5$Dw5RwjoHeb5U!Rp@YB7sDd)?&T5EaRUAphi=VL0_x@_m4D%T#v2zvl z;?p6NZsWg_#1=BksF2xn^e);FF3`Bzz=>t}1lgfP@##5BEeX6c>n1ETuA{P$v%i4h zxVIr8`~-U@qmz)bcVX?$cXU4!>%)0<{`!rwIB}@h>n^!KDU2Zvq6yrhpOgvVuZOOb zTnK7)3Z6-ro%7KAc$`n{&EucpoaN-V?Wt8`FJCj9)wpQtiqDd>JjF3yJlZg&aB>Xe z;GOK-rizi|Z0OV+XP-^}ik+4@YG5H*mRvp(`C)oec!|z~Q-r6FFu_k{gY^GsM5Y}@ zM!318FhBZittEBVZ<-nWdiPSUXu=3i2QRu~^GM6mU9~od%oqn12Gry=ijU_|G(DA` z3K{Xa#VH`0KD$r9Xy(`Ks-j3^7FJJu&2NYYZ;cN(DJ2J`HIubnH#Vfsx3)j|F!<`v znQS8yPI?7*Vxhp#W#O|c{C%%=DYgtgn}KEFI|N_5_0rG1DRC~wYiC~!^ZxW}Ql1Q0 z*v7GUJTGKbpR?XRhC{oxP>gL^Q=;GNs&n1d??u|5Gbx%pn1lAturw9TP`ZT=ds8dJl3*FWd)^7YkrUPd+tX@k zzd*+!B74rK^Jr){YoUiYK1MsmLM;#yC9Q0B>MmhBNj-ixcn! zBRqkC`!Dc+o-ZA!_HV)jZURmRiVJK8hybMnfq+|@&7q%yXCJYa=HfsjQQiMpqP_o> z362sSZed83*3kwGig)Fgs26Rkn`zn_mfE=ZvQ=aW`}LM4&1}TbT4!4jb#4)z1I&UP zDQ*zE@#fIuE=?KJ{`9skVdOLML3*LA^wG8PVs+ND2m1nwW#g7Y)qMkU@uNgU{z9!}&~6qr<9VsXh80c^ZBYR?zKvBE)JZrzB}ZJ~?}krzK2_A~3ip|9IlOzkk?A@8lxv&+5G697PZq2mscq;*@cUg8eFrL1ZA(Ml{How0nh ztLQ0=!ogt;%TJ59>AUiVqs^HCqb93sx67Zd{85Kh-c-My;CPTDBG0YMN^|pX*1kxR zSIEz9bRc$|0@uy@nF?E!Q=-o|@;o?05~c;&g(8w7*FJ@7iF-Rdty0h(+LGv%4jEi- z?!?8%*$}9)iYfV?w_1*%br+rcQY@_qsk>k)#l=<1&a4pcwU-t?D{VQf;SAk{e)Lf6 zqoEAA`6Pg0D-(Iys(Z)9G)?1qk`R!dJRvG-|GV21Y4d`wid0*4e>IAqI97=vGa po0NLsEB%t!?qaC>*5kq_Z|2)Jd&K6=i?ZZ~FFIznMIRsf>u(KA*XaNN literal 0 HcmV?d00001 diff --git a/src/main/resources/certificate/product/kjbank-oauth-prod.pub b/src/main/resources/certificate/product/kjbank-oauth-prod.pub new file mode 100644 index 0000000..bcc4c1f --- /dev/null +++ b/src/main/resources/certificate/product/kjbank-oauth-prod.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqCW0auFk5bqt7OZ2AtFw +xa/se93/hgNwDNC1kxKZpnvNM5YVj5gjlf0jOSVGNJlFTVvjIBcyPC7s1zlFDhgm +ebUKplRuw82lkIkS7mPjsqfPvMQlFjjLgrnECQ3AD86EkRcUT/bVliOtwLY6YJUa +5/1eqZCIRfLPVxOApSHuQLJ9JmSPhttwfKwTED3G2dB85D+QN5+Nre5nnWDjMScT +KOcyUZHOLO6m0UupBYU94XGJG4EEMwzSE/Lq1eJ49/wUsvaKY6Kz5G30d/ANwRZI +ex82Wp91ZPOasKKOB6vnQ/LNcMhhyYf6IzCliMUUFl53YeheXmvfWX6VLfWgjlLk +HQIDAQAB +-----END PUBLIC KEY----- From bb2e675c2c72602f2df54d257ea8d8a44e945d9f Mon Sep 17 00:00:00 2001 From: yunjy-hp Date: Wed, 14 Jan 2026 13:34:16 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=ED=91=9C=EC=A4=80=EC=A0=84=EB=AC=B8=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?OR=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/레이아웃_조건부처리.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docs/레이아웃_조건부처리.md diff --git a/docs/레이아웃_조건부처리.md b/docs/레이아웃_조건부처리.md new file mode 100644 index 0000000..8c58170 --- /dev/null +++ b/docs/레이아웃_조건부처리.md @@ -0,0 +1,32 @@ +# 레이아웃 조건부 처리 (RefValue) + +FlatReader에서 GROUP/GRID 항목의 조건부 처리를 위한 RefValue 설정 방법 + +## 지원 조건 + +| 표현식 | 의미 | 설명 | +|--------|------|------| +| `NM` | EQUALS | 값이 NM과 일치하는 경우 | +| `NM\|EM` | OR | 값이 NM 또는 EM과 일치하는 경우 | +| `!EM` | NOT | 값이 EM이 아닌 경우 | +| `!NM\|EM` | NOT OR | 값이 NM도 아니고 EM도 아닌 경우 | + +## 레이아웃 설정 예시 + +| 항목명 | 설명 | Depth | Type | Node | OccMin | Length | OccMax | RefPath | RefValue | +|--------|------|-------|------|------|--------|--------|--------|---------|----------| +| Message | 메시지부 | 1 | 3 | 0 | 1 | 0 | 1 | Message.Msg_Header.MSG_HEDR_KNCD | NM\|EM | +| Msg_Header | 메시지헤더 | 2 | 3 | 0 | 1 | 0 | 1 | | | +| MSG_HEDR_KNCD | 메시지헤더종류코드 | 3 | 2 | 1 | 1 | 2 | 1 | | NM | + +## 동작 설명 + +위 예시에서 `Message` 항목은 `MSG_HEDR_KNCD` 값이 `NM` 또는 `EM`일 때만 처리됩니다. + +- `MSG_HEDR_KNCD = "NM"` → Message 처리됨 +- `MSG_HEDR_KNCD = "EM"` → Message 처리됨 +- `MSG_HEDR_KNCD = "XX"` → Message 스킵됨 + +## 변경 파일 + +- `elink-online-common/src/main/java/com/eactive/eai/message/parser/FlatReader.java` From a7047c25232e07f2a46c2015c6ea839aa320cbe2 Mon Sep 17 00:00:00 2001 From: cho Date: Thu, 15 Jan 2026 09:08:12 +0900 Subject: [PATCH 03/10] =?UTF-8?q?RootlessArray=20=ED=82=A4=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EA=B4=80=EB=A0=A8=20=ED=95=84=ED=84=B0,=20HMAC?= =?UTF-8?q?=ED=95=84=ED=84=B0=EC=99=80=20=EB=A7=9E=EC=B6=94=EA=B8=B0?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20byte[]=EC=B2=98=EB=A6=AC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ApiRequestBodyFilter.java | 120 ++++++++++++++---- 1 file changed, 92 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java b/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java index 4e13781..b2b887f 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java @@ -1,20 +1,28 @@ package com.eactive.eai.adapter.controller; -import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.Charset; import javax.servlet.FilterChain; import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; -import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpDynamicInAdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpDynamicInAdapterUri; +import com.eactive.eai.common.stdmessage.STDMessageManager; +import com.eactive.eai.common.stdmessage.STDMsgInfoAddOnVO; + public class ApiRequestBodyFilter extends OncePerRequestFilter { @@ -23,63 +31,119 @@ public class ApiRequestBodyFilter extends OncePerRequestFilter { HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + - // 1. 필터 대상 + + String encoding = getInboundGroupAdapterEncoding(request); + if (!isTarget(request)) { filterChain.doFilter(request, response); return; } - // 2. 요청 전문 읽기 - String body = readBody(request); - if (body == null || body.isEmpty()) { + //원본 바디를 byte[]로 읽기 (개행 포함 그대로) 왜? 뒤에 필터에서 HMAC값 계산할수도 있어서 변조되면 안됨. 개행문자도 그대로 가야함. + byte[] rawBody = readBodyAsBytes(request); + + if (rawBody == null || rawBody.length == 0) { filterChain.doFilter(request, response); return; } - String modifiedBody = body; + byte[] finalBody = rawBody; try { - Object json = JSONValue.parse(body); - // 3. 예제: ROOTLESS ARRAY 보정 + String bodyStr = new String(rawBody, encoding); + Object json = JSONValue.parse(bodyStr); + if (json instanceof JSONArray) { JSONObject wrap = new JSONObject(); wrap.put("KJB_ROOTLESS_ARRAY", json); - modifiedBody = wrap.toJSONString(); + finalBody = wrap.toJSONString().getBytes(encoding); } } catch (Exception e) { - // 변조 실패 → 원본 유지 - modifiedBody = body; + // JSON 파싱 실패 시 원본 유지 + finalBody = rawBody; } - - byte[] bytes = modifiedBody.getBytes(request.getCharacterEncoding() != null ? request.getCharacterEncoding() : Charset.defaultCharset().name() ); - // 5. Wrapper로 재주입 + // Wrapper로 재주입 HttpServletRequest wrapped = - new CachedBodyHttpServletRequest(request, bytes); + new CachedBodyHttpServletRequest(request, finalBody); filterChain.doFilter(wrapped, response); } private boolean isTarget(HttpServletRequest request) { String uri = request.getRequestURI(); - - return ("POST".equals(request.getMethod()) || "PUT".equals(request.getMethod())) - && (uri.startsWith("/api") || uri.startsWith("/mapi") ) && !uri.startsWith("/mapi/oauth2/token"); + && (uri.startsWith("/api") || uri.startsWith("/mapi")) + && !uri.startsWith("/mapi/oauth2/token"); } - private String readBody(HttpServletRequest request) throws IOException { - StringBuilder sb = new StringBuilder(); - try (BufferedReader br = request.getReader()) { - String line; - while ((line = br.readLine()) != null) { - sb.append(line); + + private byte[] readBodyAsBytes(HttpServletRequest request) throws IOException { + try (ServletInputStream is = request.getInputStream(); + ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[4096]; + int len; + while ((len = is.read(buffer)) != -1) { + baos.write(buffer, 0, len); + } + return baos.toByteArray(); + } + } + + private String getInboundGroupAdapterEncoding(HttpServletRequest request) { + String apiUri = request.getRequestURI(); + apiUri = StringUtils.removeStart(apiUri, request.getContextPath()); + apiUri = StringUtils.removeEnd(apiUri, "/"); + + String methodAndUri = request.getMethod() + "|" + apiUri; + String adapterGrpName; + HttpDynamicInAdapterUri adptUri = null; + + try { + STDMessageManager manager = STDMessageManager.getInstance(); + STDMsgInfoAddOnVO stdMsgInfo = manager.getStdMsgInfoAddOn(methodAndUri); + adapterGrpName = stdMsgInfo.gAdapterGroupName(); + + adptUri = findAdptUri(apiUri, HttpDynamicInAdapterManager.getInstance(), adapterGrpName); + } catch (Exception e) { + adptUri = null; + } + + AdapterGroupVO adapterGroupVO = AdapterManager.getInstance().getAdapterGroupVO( adptUri.getAdptGrpName()); + + if( adapterGroupVO == null ) { + return Charset.defaultCharset().name(); + } + + return StringUtils.isNotBlank(adapterGroupVO.getMessageEncode()) ? adapterGroupVO.getMessageEncode() : Charset.defaultCharset().name(); //서버 jvm file.encoding 확인, file.encoding=utf-8 주고있음. + + } + + private HttpDynamicInAdapterUri findAdptUri(String apiUri, HttpDynamicInAdapterManager manager, String adapterGrpName) throws Exception { + if (StringUtils.isBlank(apiUri)) { + return null; + } + + + for (int i = 0; i < 10; i++) { + HttpDynamicInAdapterUri adptUri = manager.getAdptUri(apiUri); + if (adptUri != null) { + if (adptUri.getAdptGrpName().equals(adapterGrpName)) { + return adptUri; + } + } + + apiUri = StringUtils.substringBeforeLast(apiUri, "/"); + if (apiUri.length() < 4) { // /api + return null; } } - return sb.toString(); - } -} \ No newline at end of file + return null; + } +} From 808e6bdb96f85a26d72defea3db54a985fc9a5ba Mon Sep 17 00:00:00 2001 From: jaewohong Date: Thu, 15 Jan 2026 09:11:40 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EA=B0=95=EC=A0=9C=20=EB=8C=80=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=B9=98=ED=99=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/eai/adapter/controller/ApiAdapterController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java b/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java index 213cc3a..fb4d78e 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java @@ -142,7 +142,7 @@ public class ApiAdapterController implements HttpAdapterServiceKey { int httpStatus = servletResponse.getStatus(); if (httpStatus == 200) { // 업체별 aync response message 가 다르다. - String asyncMsgStyle = httpProp.getProperty("ASYNC_RTNMSG_TYPE", "").toUpperCase(); + String asyncMsgStyle = httpProp.getProperty("ASYNC_RTNMSG_TYPE", ""); String responseBody =""; if (asyncMsgStyle == null || asyncMsgStyle.trim().isEmpty()) { responseBody = makeResponseBodyMsg(); From b4626119db7d8d0e533e7e20660e7a95ad552f61 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Thu, 15 Jan 2026 11:40:59 +0900 Subject: [PATCH 05/10] =?UTF-8?q?INBOUND=5FREQUEST=5FMESSAGE=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD.=20?= =?UTF-8?q?=EC=88=9C=EC=88=98=ED=95=9C=20Request=20body=EA=B0=92=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=ED=95=98=EB=8F=84=EB=A1=9D.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/adapter/service/ApiAdapterService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 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 e831d91..6f4a3b2 100644 --- a/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java +++ b/src/main/java/com/eactive/eai/adapter/service/ApiAdapterService.java @@ -239,8 +239,12 @@ public class ApiAdapterService extends HttpAdapterServiceSupport { if (paramValue == null) { // parameter가 없는 경우때문에 처리 paramValue = ""; - } - else { // jwhong decrypt + } + // 순수한 Body값을 저장을 위해 위치 변경. + transactionProp.put(INBOUND_REQUEST_MESSAGE, paramValue); + + // paramValue가 null이 아닌 빈문자열(""," ")인 경우에 대비하여 조건 수정. + if (StringUtils.isNotBlank(paramValue)) { // jwhong decrypt paramValue = doPreDecryption(paramValue, transactionProp, request); } @@ -296,7 +300,8 @@ public class ApiAdapterService extends HttpAdapterServiceSupport { message = ""; } - transactionProp.put(INBOUND_REQUEST_MESSAGE, message); + // 위치변경 : 가공되지 않은 Body값을 저장하기 위하여 위쪽으로 이동. +// transactionProp.put(INBOUND_REQUEST_MESSAGE, message); // 로컬 서비스 호출 ,encoding 처리 추가 String result = (String) service(adptGrpName, adptName, message, transactionProp, request, response); From 8b30276c6bf9d5ff05b2a429a7b69d392daf0cfc Mon Sep 17 00:00:00 2001 From: cho Date: Thu, 15 Jan 2026 15:02:42 +0900 Subject: [PATCH 06/10] =?UTF-8?q?HMAC=EC=B2=98=EB=A6=AC=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ApiRequestBodyFilter.java | 7 ++++--- .../adapter/controller/ApiResponseAdvice.java | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java b/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java index b2b887f..d77aebf 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiRequestBodyFilter.java @@ -25,6 +25,8 @@ import com.eactive.eai.common.stdmessage.STDMsgInfoAddOnVO; public class ApiRequestBodyFilter extends OncePerRequestFilter { + + static final String KJB_ROOTLESS_ARRAY = "{ \"KJB_ROOTLESS_ARRAY\" : "; @Override protected void doFilterInternal(HttpServletRequest request, @@ -57,9 +59,8 @@ public class ApiRequestBodyFilter extends OncePerRequestFilter { Object json = JSONValue.parse(bodyStr); if (json instanceof JSONArray) { - JSONObject wrap = new JSONObject(); - wrap.put("KJB_ROOTLESS_ARRAY", json); - finalBody = wrap.toJSONString().getBytes(encoding); + bodyStr = KJB_ROOTLESS_ARRAY + bodyStr + "}"; + finalBody = bodyStr.getBytes(encoding); } } catch (Exception e) { diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java b/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java index 4827f88..e5d34c4 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java @@ -13,6 +13,8 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; @RestControllerAdvice public class ApiResponseAdvice implements ResponseBodyAdvice { + + static final String KJB_ROOTLESS_ARRAY = "{ \"KJB_ROOTLESS_ARRAY\" : "; @Override public boolean supports(MethodParameter returnType, Class> converterType) { @@ -34,16 +36,16 @@ public class ApiResponseAdvice implements ResponseBodyAdvice { } String removeRootlessArrayKeyFormResponseBody(String body) { - try { - Object root = JSONValue.parse(body); - if (root instanceof JSONObject && ((JSONObject) root).containsKey("KJB_ROOTLESS_ARRAY")) { - JSONArray jsonArray = (JSONArray) ((JSONObject) root).get("KJB_ROOTLESS_ARRAY"); - return jsonArray.toJSONString(); - } else { - return body; + if (body.startsWith(KJB_ROOTLESS_ARRAY)) { + body = body.substring(KJB_ROOTLESS_ARRAY.length()); + + if (body.endsWith("}")) { + body = body.substring(0, body.length() - 1); } - } catch (Exception e) { + + return body; + } else { return body; } From 5712405a24b249c63bd4c4bced55b438f48dfbdd Mon Sep 17 00:00:00 2001 From: cho Date: Thu, 15 Jan 2026 15:51:03 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/adapter/controller/ApiResponseAdvice.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java b/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java index e5d34c4..8fb5489 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiResponseAdvice.java @@ -37,15 +37,16 @@ public class ApiResponseAdvice implements ResponseBodyAdvice { String removeRootlessArrayKeyFormResponseBody(String body) { - if (body.startsWith(KJB_ROOTLESS_ARRAY)) { - body = body.substring(KJB_ROOTLESS_ARRAY.length()); + try { + Object root = JSONValue.parse(body); - if (body.endsWith("}")) { - body = body.substring(0, body.length() - 1); + if (root instanceof JSONObject && ((JSONObject) root).containsKey("KJB_ROOTLESS_ARRAY")) { + JSONArray jsonArray = (JSONArray) ((JSONObject) root).get("KJB_ROOTLESS_ARRAY"); + return jsonArray.toJSONString(); + } else { + return body; } - - return body; - } else { + } catch (Exception e) { return body; } From 775d16924ce5c836abce7e389458ca9b2fb60fb6 Mon Sep 17 00:00:00 2001 From: cho Date: Fri, 16 Jan 2026 10:49:59 +0900 Subject: [PATCH 08/10] =?UTF-8?q?simpleframework=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EA=B8=B0=EB=8A=A5=20=EC=97=85=EB=AC=B4?= =?UTF-8?q?=EC=A0=84=EB=AC=B8=EC=97=90=EB=8F=84=20GUID=20=EB=84=A3?= =?UTF-8?q?=EC=9D=84=EC=88=98=EC=9E=88=EA=B2=8C=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HttpClient5AdapterFilterFactory.java | 3 +++ .../filter/HttpClient5AdapterFilterType.java | 1 + .../filter/SimpleframeworkBodyFilter.java | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleframeworkBodyFilter.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 index 72f99ec..a4f04ad 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 @@ -24,6 +24,9 @@ public class HttpClient5AdapterFilterFactory { case SIMPLEFRAMEWORK: filter = new SimpleFrameworkFilter(); break; + case SIMPLEFRAMEWORKBODY: + filter = new SimpleframeworkBodyFilter(); + break; case JBOBP: filter = new JBOBPFilter(); break; 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 c927220..ae21d7f 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 @@ -2,6 +2,7 @@ package com.eactive.eai.custom.kjb.adapter.http.client.filter; public enum HttpClient5AdapterFilterType { SIMPLEFRAMEWORK, + SIMPLEFRAMEWORKBODY, JBOBP, KFTCFACE, KFTCP2P, diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleframeworkBodyFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleframeworkBodyFilter.java new file mode 100644 index 0000000..f051c2b --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleframeworkBodyFilter.java @@ -0,0 +1,26 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.common.TransactionContextKeys; + +public class SimpleframeworkBodyFilter extends SimpleFrameworkFilter { + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = super.doPreFilter(adptGrpName, adptName, prop, message, tempProp); + + JSONObject bizJsonStr = null; + + if ( returnMessage instanceof String ) { + bizJsonStr = (JSONObject) JSONValue.parse( (String)returnMessage); + bizJsonStr.put("GUID", tempProp.get(TransactionContextKeys.GUID)); + } + + return bizJsonStr != null ? bizJsonStr.toJSONString() : returnMessage; + } +} From 4c47abdc3334659448485eb4482b436837c6ca9a Mon Sep 17 00:00:00 2001 From: jaewohong Date: Mon, 19 Jan 2026 08:30:03 +0900 Subject: [PATCH 09/10] =?UTF-8?q?async=20100=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=EB=B0=8F=20sync=20400=20response=20=EC=97=90=EC=84=9C=20traceI?= =?UTF-8?q?d=3Duuid=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/eai/adapter/controller/ApiAdapterController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java b/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java index fb4d78e..f61d6ff 100644 --- a/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java +++ b/src/main/java/com/eactive/eai/adapter/controller/ApiAdapterController.java @@ -138,7 +138,8 @@ public class ApiAdapterController implements HttpAdapterServiceKey { // if (RESPONSE_TYPE_ASYNC.equals(responseType)) { // table의 값이 ASYNC 로 들어가 있는데 response_type_async는 ASYN 로 되어 있어 아래처럼 비교함 jwhong 2025 if ("ASYNC".equals(responseType)) { //responseEntity = ResponseEntity.ok("dummy"); // comment by jwhong - servletResponse.addHeader("traceId", responseData); // uuid를 response header에 + //servletResponse.addHeader("traceId", responseData); // uuid를 response header에 + servletResponse.addHeader("traceId", transactionProp.getProperty(TransactionContextKeys.TRANSACTION_UUID)); // uuid를 response header에 int httpStatus = servletResponse.getStatus(); if (httpStatus == 200) { // 업체별 aync response message 가 다르다. @@ -158,6 +159,8 @@ public class ApiAdapterController implements HttpAdapterServiceKey { // responseEntity = ResponseEntity.ok().contentType(mediaType).body(responseData); // 버즈빌 포인트 적립 처리하기 위하여 정상응답이더라도 응답코드(apiRsltCd) 값이 200이 아닌 경우 처리를 위하여 수정 // Filter에서 설정한 response status값을 responseEntity 생성시 적용 modify by lwk 2025.03.24 + + servletResponse.addHeader("traceId", transactionProp.getProperty(TransactionContextKeys.TRANSACTION_UUID)); // uuid를 response header에 int httpStatus = servletResponse.getStatus(); if (httpStatus != 200) { responseEntity = ResponseEntity.status(httpStatus).contentType(mediaType).body(responseData); From 121389c267c3aaeae65d29df69728c550fc5f83a Mon Sep 17 00:00:00 2001 From: jaewohong Date: Mon, 19 Jan 2026 16:43:33 +0900 Subject: [PATCH 10/10] =?UTF-8?q?x-loan-token=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/http/client/filter/AsyncReponseFilter.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 index 01eeb53..4b76ebf 100644 --- 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 @@ -14,6 +14,7 @@ public class AsyncReponseFilter implements HttpClientAdapterFilter, HttpAdapterS 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) @@ -21,6 +22,7 @@ public class AsyncReponseFilter implements HttpClientAdapterFilter, HttpAdapterS logger.debug("AsyncReponseFilter] PreFilter Processing Start!!"); String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + String xloanToken = tempProp.getProperty(TransactionContextKeys.X_LOAN_TOKEN, ""); Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); if (filterHeaders == null) { @@ -35,7 +37,13 @@ public class AsyncReponseFilter implements HttpClientAdapterFilter, HttpAdapterS filterHeaders.put(X_TRACE_ID, inboundHeaderMap.get(X_TRACE_ID)); logger.debug("AsyncReponseFilter] Processing Key ["+X_TRACE_ID+"], value ["+inboundHeaderMap.get(X_TRACE_ID)+"]"); } + + if (inboundHeaderMap.containsKey(TransactionContextKeys.X_LOAN_TOKEN)||inboundHeaderMap.containsKey(TransactionContextKeys.X_LOAN_TOKEN.toLowerCase())) { + filterHeaders.put(TransactionContextKeys.X_LOAN_TOKEN, inboundHeaderMap.get(TransactionContextKeys.X_LOAN_TOKEN)); + logger.debug("AsyncReponseFilter] Processing Key ["+TransactionContextKeys.X_LOAN_TOKEN+"], value ["+inboundHeaderMap.get(TransactionContextKeys.X_LOAN_TOKEN)+"]"); + } } + filterHeaders.setProperty(TRACE_ID, traceId); logger.debug("AsyncReponseFilter] Processing Key ["+TRACE_ID+"], value ["+traceId+"]");