From 158987b367c54e1d1d0503a6fdbe636eff6a0112 Mon Sep 17 00:00:00 2001 From: curry772 Date: Wed, 13 May 2026 13:30:09 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20EncFieldCryptoFilter=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20DJErp=20=EC=96=B4=EB=8C=91=ED=84=B0=20?= =?UTF-8?q?=EC=95=94=ED=98=B8=ED=99=94=20=EB=AA=A8=EB=93=88=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EncFieldCryptoFilter 추가: /encryptedData 경로 고정 CryptoFilter 구현체 (CryptoAdapterFilter 대체, custom 패키지로 분리) - DJErpApiAdapterService: CRYPTO_MODULE_NAME 프로퍼티 transactionProp에 전달 - elink-online-common 서브모듈 업데이트 (CryptoFilter UPPER_UNDERSCORE 키, HSM 통합 테스트 포함) - elink-online-transformer 서브모듈 업데이트 Co-Authored-By: Claude Sonnet 4.6 --- elink-online-common | 2 +- elink-online-transformer | 2 +- .../service/DJErpApiAdapterService.java | 4 +- .../dynamic/filter/EncFieldCryptoFilter.java | 40 +++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/EncFieldCryptoFilter.java diff --git a/elink-online-common b/elink-online-common index 444b7ad..e208a2d 160000 --- a/elink-online-common +++ b/elink-online-common @@ -1 +1 @@ -Subproject commit 444b7ad595c2c8bc6f2cdf57e33c8d76d9d68edd +Subproject commit e208a2d64b035202f1f1c94dc5251820e1e1170c diff --git a/elink-online-transformer b/elink-online-transformer index 17f6df5..82c7c2b 160000 --- a/elink-online-transformer +++ b/elink-online-transformer @@ -1 +1 @@ -Subproject commit 17f6df50688bde6b2adff48c4e914841314fd517 +Subproject commit 82c7c2bc8cb1029f3a6abf6d65d5edb57e4f4d83 diff --git a/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java b/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java index 2fde9ef..2a313e4 100644 --- a/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java +++ b/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java @@ -7,6 +7,7 @@ import com.eactive.eai.adapter.Keys; import com.eactive.eai.adapter.http.HttpMemoryLogger; import com.eactive.eai.adapter.http.HttpMethodType; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceSupport; +import com.eactive.eai.adapter.http.dynamic.filter.CryptoFilter; import com.eactive.eai.adapter.http.dynamic.filter.JwtAuthFilter; import com.eactive.eai.common.exception.ExceptionUtil; import com.eactive.eai.common.message.MessageType; @@ -142,7 +143,8 @@ public class DJErpApiAdapterService extends HttpAdapterServiceSupport { 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 - + + transactionProp.put(CryptoFilter.PROP_MODULE_NAME, httpProp.getProperty(CryptoFilter.PROP_MODULE_NAME, "")); // SEED 컬럼암호하 시 Key로 사용함 String seedkey = getHeaders(request).getOrDefault("x-obp-partnercode", "").toString(); diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/EncFieldCryptoFilter.java b/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/EncFieldCryptoFilter.java new file mode 100644 index 0000000..8664b1b --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/EncFieldCryptoFilter.java @@ -0,0 +1,40 @@ +package com.eactive.eai.custom.adapter.http.dynamic.filter; + +import java.util.Properties; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.eactive.eai.adapter.http.dynamic.filter.BaseCryptoFilter; +import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter; + +/** + * CryptoFilter 프로퍼티를 멤버변수로 관리하는 HttpAdapterFilter 구현체. + * + * 멤버변수에 세팅된 값을 Properties로 변환하여 {@link BaseCryptoFilter}에 위임한다. + * 값이 blank인 멤버변수는 Properties에 포함하지 않으며, CryptoFilter의 기본값이 적용된다. + */ +public class EncFieldCryptoFilter implements HttpAdapterFilter { + + private final BaseCryptoFilter filter = new BaseCryptoFilter(); + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + return filter.doPreFilter(adptGrpName, adptName, message, setProp(prop), request, response); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Object resultMessage, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + return filter.doPostFilter(adptGrpName, adptName, resultMessage, setProp(prop), request, response); + } + + private Properties setProp(Properties p) { + p.setProperty(BaseCryptoFilter.PROP_DEC_FROM_PATH, "/encryptedData"); + p.setProperty(BaseCryptoFilter.PROP_ENC_TO_PATH, "/encryptedData"); + return p; + } + + +}