어댑터 헤더셋팅 프로퍼티 처리 추가.

This commit is contained in:
cho
2026-01-10 16:02:28 +09:00
parent a61ced84c5
commit 8957b763ff
2 changed files with 51 additions and 29 deletions
@@ -9,15 +9,22 @@ import java.net.URI;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Properties; import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import com.eactive.eai.common.property.PropManager; // encrypt test by jwhong
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.StopWatch; import org.apache.commons.lang3.time.StopWatch;
@@ -60,34 +67,26 @@ import com.eactive.eai.adapter.http.client.HttpClient5AdapterServiceSupport;
import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey; import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey;
import com.eactive.eai.adapter.http.client.HttpClientAdapterVO; import com.eactive.eai.adapter.http.client.HttpClientAdapterVO;
import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey;
import com.eactive.eai.authserver.service.OAuth2Manager;
import com.eactive.eai.common.TransactionContextKeys; import com.eactive.eai.common.TransactionContextKeys;
import com.eactive.eai.common.authoutbound.AccessTokenManagerByDB; import com.eactive.eai.common.authoutbound.AccessTokenManagerByDB;
import com.eactive.eai.common.exception.ExceptionUtil; import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.message.MessageType; import com.eactive.eai.common.message.MessageType;
import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.util.CommonLib; import com.eactive.eai.common.util.CommonLib;
import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import com.kjbank.encrypt.exchange.crypto.AES256Cipher;
import com.kjbank.encrypt.exchange.crypto.AES256GCMCipher;
import com.kjbank.encrypt.exchange.crypto.AESCipher;
import com.kjbank.encrypt.exchange.crypto.ECDHESA256Cipher;
import com.nimbusds.jwt.SignedJWT;
import com.openbanking.eai.common.token.AccessTokenManager; import com.openbanking.eai.common.token.AccessTokenManager;
import com.openbanking.eai.common.token.AccessTokenVO; import com.openbanking.eai.common.token.AccessTokenVO;
import com.openbanking.eai.common.token.OAuth2AccessTokenVO; import com.openbanking.eai.common.token.OAuth2AccessTokenVO;
import edu.emory.mathcs.backport.java.util.Arrays; import edu.emory.mathcs.backport.java.util.Arrays;
// encrypt test by jwhong
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import com.kjbank.encrypt.exchange.crypto.AES256Cipher;
import com.kjbank.encrypt.exchange.crypto.AESCipher;
import com.nimbusds.jwt.SignedJWT;
import com.kjbank.encrypt.exchange.crypto.AES256GCMCipher;
import com.kjbank.encrypt.exchange.crypto.ECDHESA256Cipher;
import com.eactive.eai.authserver.service.OAuth2Manager;
import java.util.Set;
import java.util.HashSet;
import java.util.Date;
/** /**
* 1. 기능 : EAI HTTP OutBound 용 어댑터로 수동 시스템의 HTTP 웹 컴포넌트를 GET/POST 방식으로 호출할 수 있는 * 1. 기능 : EAI HTTP OutBound 용 어댑터로 수동 시스템의 HTTP 웹 컴포넌트를 GET/POST 방식으로 호출할 수 있는
* 기능을 제공한다.<br> * 기능을 제공한다.<br>
@@ -112,11 +111,13 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
public static final String HTTP_STATUS = "HTTP_STATUS"; public static final String HTTP_STATUS = "HTTP_STATUS";
public static final String HEADER_KEYS = "HEADER_KEYS"; public static final String HEADER_KEYS = "HEADER_KEYS";
public static final String AUTH_TOKEN = "AUTH_TOKEN"; public static final String AUTH_TOKEN = "AUTH_TOKEN";
public static final String HTTP_HEADER_SETTING = "HTTP_HEADER_SETTING";
public static final String PAYLOAD_PARAM_NAME_CLIENT_ID = "client_id"; // jwhong public static final String PAYLOAD_PARAM_NAME_CLIENT_ID = "client_id"; // jwhong
private boolean useAdapterToken; private boolean useAdapterToken;
private boolean encryptResponseApply; private boolean encryptResponseApply;
private String httpHeaderSettingByAdapter = "{}";
/** /**
* 1. 기능 : REST API 통신에 사용 <br> * 1. 기능 : REST API 통신에 사용 <br>
@@ -393,7 +394,7 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
// 전달 header 셋팅 // 전달 header 셋팅
// Adapter 레벨 header 보다 data로 넘어온 httpHeader를 우선 적용(header명이 같다면 덮어씀) // Adapter 레벨 header 보다 data로 넘어온 httpHeader를 우선 적용(header명이 같다면 덮어씀)
assignRequestHeaders(method, httpHeader); assignRequestHeaders(method, httpHeader, prop);
// KJBank API 추적정보를 Header에 제공. jwhong // KJBank API 추적정보를 Header에 제공. jwhong
//assignRequestKJHeaders(method, prop, tempProp ); //assignRequestKJHeaders(method, prop, tempProp );
@@ -790,27 +791,48 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
return false; return false;
} }
private void assignRequestHeaders(HttpUriRequestBase method, Object httpHeader) { private void assignRequestHeaders(HttpUriRequestBase method, Object httpHeader, Properties prop) {
if (httpHeader == null) { if (httpHeader != null) {
return; if (httpHeader instanceof JSONObject) {
} JSONObject jsonObject = (JSONObject) httpHeader;
for (Object key : jsonObject.keySet()) {
Object obj = jsonObject.get(key);
if ((obj instanceof JSONObject) || (obj instanceof JSONArray)) {
continue;
}
if (httpHeader instanceof JSONObject) { method.setHeader((String) key, (String) obj);
JSONObject jsonObject = (JSONObject) httpHeader;
for (Object key : jsonObject.keySet()) { if (logger.isDebugEnabled()) {
Object obj = jsonObject.get(key); logger.debug("Request Header :" + (String) key + "=[" + (String) obj + "]");
}
}
}
}
//전문에서 추출한 httpHeader값 외 어댑터에서 최종적으로 적용되도록,
String httpSettingJsonStr = prop.getProperty( HTTP_HEADER_SETTING , "{}");
try {
JSONObject httpValues = (JSONObject) JSONValue.parse(httpSettingJsonStr);
for (Object key : httpValues.keySet()) {
Object obj = httpValues.get(key);
if ((obj instanceof JSONObject) || (obj instanceof JSONArray)) { if ((obj instanceof JSONObject) || (obj instanceof JSONArray)) {
continue; continue;
} }
method.setHeader((String) key, (String) obj); method.setHeader((String) key, obj);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("Request Header :" + (String) key + "=[" + (String) obj + "]"); logger.debug("Request Header :" + (String) key + "=[" + (String) obj + "]");
} }
} }
}catch (Exception e) {
logger.error("HTTP_HEADER_SETTING value is not JSONObject Type, skip.", e);
} }
} }
private void assignFilterHeaders(HttpUriRequestBase method, Properties tempProp) { private void assignFilterHeaders(HttpUriRequestBase method, Properties tempProp) {
@@ -31,6 +31,6 @@ public interface HttpClientAccessTokenServiceByDB {
* @return 반환 된 AccessTokenVO * @return 반환 된 AccessTokenVO
* @exception Exception 수동 시스템 간 통신 중 발생 * @exception Exception 수동 시스템 간 통신 중 발생
**/ **/
public Object execute(String name, Properties adapterProp, OutboundOAuthCredentialVo oAuthCredentialVo) throws Exception ; public Object execute(String adapterGroupName, Properties adapterProp, OutboundOAuthCredentialVo oAuthCredentialVo) throws Exception ;
} }