diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java new file mode 100644 index 0000000..d034ceb --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java @@ -0,0 +1,142 @@ +package com.eactive.eai.adapter.http.client.impl; + +import java.util.Properties; + +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.filter.HttpClient5AdapterFilterFactory; +import com.eactive.eai.adapter.http.client.impl.filter.HttpClientAdapterFilter; + +/** + * 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); + + 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 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; + } + + logger.debug("HttpClient5AdapterServiceRestAddFilter] Processing Start [" + filterName + "]"); + 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; + } + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java new file mode 100644 index 0000000..12eb59f --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java @@ -0,0 +1,121 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +import java.util.Arrays; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; +import java.util.stream.Stream; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + +public class AllHeaderFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String PROPERTIES_GROUP_NAME = "HttpHeaderFilter"; + public static final String HEADER_KEY_NAMES = "AllHeaderFilter.blackList"; + + + String[] HttpHeaderRelayBlackList = { + "Content-Length", + "Transfer-Encoding", + "Host", + "Authorization", + "Accept", + "Host", + "Cookie", + "Connection", + "Keep-Alive", + "Proxy-Authenticate", + "Proxy-Authorization", + "TE", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Content-Type", + "Content-Encoding", + "Content-Language", + "Content-Location", + "Content-MD5", + "Expect", + }; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + logger.debug("doPreFilter Processing Start."); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + String propValue = PropManager.getInstance().getProperty(PROPERTIES_GROUP_NAME, HEADER_KEY_NAMES, "").trim(); + + String[] userSettingBlackList = propValue.split(","); + + if( userSettingBlackList.length > 0 ) { + HttpHeaderRelayBlackList = Stream + .concat(Arrays.stream(HttpHeaderRelayBlackList), Arrays.stream(userSettingBlackList)) + .toArray(String[]::new); + } + + + for(String keyName : inboundHeaderMap.keySet() ) { + + if( StringUtils.equalsAnyIgnoreCase( keyName, HttpHeaderRelayBlackList ) ) { + logger.debug("Skip Processing Key ["+keyName+"], value ["+inboundHeaderMap.get(keyName)+"] in HttpHeaderRelayBlackList"); + continue; + } + + filterHeaders.put(keyName, inboundHeaderMap.get(keyName)); + logger.debug("Processing Key ["+keyName+"], value ["+inboundHeaderMap.get(keyName)+"]"); + } + + logger.debug("doPreFilter Processing End."); + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/AsyncReponseFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AsyncReponseFilter.java new file mode 100644 index 0000000..14727ab --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AsyncReponseFilter.java @@ -0,0 +1,118 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +import java.util.Arrays; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; + +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.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"; + + public static final String PROPERTIES_GROUP_NAME = "HttpHeaderFilter"; + public static final String HEADER_KEY_NAMES = "AsyncReponseFilter"; + + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + logger.debug("AsyncReponseFilter] PreFilter Processing Start!!"); + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + + String propValue = PropManager.getInstance().getProperty(PROPERTIES_GROUP_NAME, HEADER_KEY_NAMES, "").trim(); + + String[] headerKeyNames = propValue.split(","); + + + headerKeyNames = Arrays.stream(headerKeyNames) + .map(String::trim) + .toArray(String[]::new); + + try { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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)+"]"); + } + + if (inboundHeaderMap.containsKey(TransactionContextKeys.X_LOAN_TOKEN)) { + 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+"]"); + + for (String keyName : inboundHeaderMap.keySet()) { + + if (StringUtils.equalsAnyIgnoreCase(keyName, headerKeyNames)) { + String value = inboundHeaderMap.get(keyName); + filterHeaders.put(keyName, value); + logger.debug("AsyncReponseFilter] Processing Key [" + keyName + "], value [" + value + "]"); + } + + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java new file mode 100644 index 0000000..f0947b2 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java @@ -0,0 +1,90 @@ +package com.eactive.eai.adapter.http.client.impl.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 customBasePackage = "com.eactive.eai.custom.adapter.http.client.filter"; + static String basePackage = "com.eactive.eai.adapter.http.client.impl.filter"; + private static ConcurrentHashMap h = 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 SIMPLEFRAMEWORKBODY: + filter = new SimpleframeworkBodyFilter(); + 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 TRACEBODY: + filter = new TraceBodyFilter(); + break; + case TOSSBANK: + filter = new TOSSBankFilter(); + break; + case ASYNCRESPONSE: + filter = new AsyncReponseFilter(); + break; + case ALLHEADER: + filter = new AllHeaderFilter(); + break; + default: + filter = classForName(type); + if (filter == null) { + filter = classForName(customBasePackage + "." + 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; + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java new file mode 100644 index 0000000..03865ec --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java @@ -0,0 +1,27 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +public enum HttpClient5AdapterFilterType { + SIMPLEFRAMEWORK, + SIMPLEFRAMEWORKBODY, + JBOBP, + KFTCFACE, + KFTCP2P, + KAKAOBANK, + NAVERFIN, + NICECREDIT, + TOSSBANK, + TRACEBODY, + ASYNCRESPONSE, + ALLHEADER, + 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/adapter/http/client/impl/filter/HttpClientAdapterFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilter.java new file mode 100644 index 0000000..0f836d3 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilter.java @@ -0,0 +1,12 @@ +package com.eactive.eai.adapter.http.client.impl.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/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java new file mode 100644 index 0000000..36a0b19 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java @@ -0,0 +1,35 @@ +package com.eactive.eai.adapter.http.client.impl.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/adapter/http/client/impl/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/JBOBPFilter.java new file mode 100644 index 0000000..61fea8e --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/JBOBPFilter.java @@ -0,0 +1,106 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; + +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 { + + logger.debug("JBOBPFilter] PreFilter Processing Start!!"); + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) systemTrustKey = propGroupVo.getProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + String obpPartnerCode = "000000-00"; + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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+"]"); + } + + 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()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KAKAOBankFilter.java new file mode 100644 index 0000000..d30760f --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KAKAOBankFilter.java @@ -0,0 +1,135 @@ +package com.eactive.eai.adapter.http.client.impl.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; +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 { + + logger.debug("KAKAOBankFilter] PreFilter Processing Start!!"); + 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 { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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 (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 (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 (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 (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); + } + } 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); + } + 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()); + } + + return returnMessage; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCFaceFilter.java new file mode 100644 index 0000000..a46a751 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCFaceFilter.java @@ -0,0 +1,154 @@ +package com.eactive.eai.adapter.http.client.impl.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; +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.server.EAIServerManager; +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"; + public static String instId = null; + + static { + EAIServerManager eaiServerManager = EAIServerManager.getInstance(); + instId = eaiServerManager.getInstId(); + } + + @SuppressWarnings({ "unchecked" }) + @Override + 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"; // 광주은행 행코드 + + 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 reqDate = new SimpleDateFormat("yyMMdd").format(new Date()); + String reqTime = new SimpleDateFormat("HHmmss").format(new Date()); + // 기관코드(3) + 요청일자(6) -- 금결원 표준화 항목, 고정 9자리. + // 요청시간(6) + 인스턴스ID(2) + RandomString(3) -- 기관별 생성 거래고유번호(11자리) + // 기관코드(3) + 요청일자(6) + 요청시간(6) + 인스턴스ID(2) + RandomString(3) -- 20자리. + String transaction_id = orgCode + reqDate + reqTime + instId + RandomStringUtils.random(3, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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+"]"); + } + } else { + filterHeaders.setProperty(H_CLIENT_ID, clientId); + logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+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); + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCP2PFilter.java new file mode 100644 index 0000000..b6992d3 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCP2PFilter.java @@ -0,0 +1,122 @@ +package com.eactive.eai.adapter.http.client.impl.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; + +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.server.EAIServerManager; +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"; + public static String instId = null; + + static { + EAIServerManager eaiServerManager = EAIServerManager.getInstance(); + instId = eaiServerManager.getInstId(); + } + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + logger.debug("KFTCP2PFilter] PreFilter Processing Start!!"); + String orgCode = "D210400012"; // 광주은행 개발 기관코드(운영: K210800020) + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + H_ORG_CODE); + } + + String apiTrxDtm = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); + String apiTrxTm = new SimpleDateFormat("HHmmss").format(new Date()); + // 기관코드(10) + 인스턴스ID(2) + 일시(6) + RandomString(2) -- 총 20자리 + String apiTrxNo = orgCode + instId + apiTrxTm + RandomStringUtils.random(2, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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 (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+"]"); + } + } else { + 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()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NAVERFinFilter.java new file mode 100644 index 0000000..258cebb --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NAVERFinFilter.java @@ -0,0 +1,107 @@ +package com.eactive.eai.adapter.http.client.impl.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; +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 { + + logger.debug("NAVERFinFilter] PreFilter Processing Start!!"); + 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 { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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 (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+"]"); + } + } else { + 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()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/NICECreditFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NICECreditFilter.java new file mode 100644 index 0000000..d037aae --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NICECreditFilter.java @@ -0,0 +1,138 @@ +package com.eactive.eai.adapter.http.client.impl.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.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 { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + if (inboundHeaderMap != null && inboundHeaderMap.containsKey(H_PRODUCTID)) { + for (Entry e : inboundHeaderMap.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); + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleFrameworkFilter.java new file mode 100644 index 0000000..9087e06 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleFrameworkFilter.java @@ -0,0 +1,109 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; + +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; +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"; + public static final String PARTNER_TRACE_ID = "partnerTraceId"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + logger.debug("SimpleFrameworkFilter] PreFilter Processing Start!!"); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + try { + /* 업체정보 */ + String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID); + if (StringUtils.isEmpty(clientId)) clientId = ""; + filterHeaders.put(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 ["+TRACEID+"], value ["+uuid+"]"); + + /* GUID */ + String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); + filterHeaders.put(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 ["+RECEIVEDTIMESTAMP+"], value ["+receivedTimestamp+"]"); + + String partnerTraceId = inboundHeaderMap.getOrDefault(PARTNER_TRACE_ID, ""); + filterHeaders.put(PARTNER_TRACE_ID, partnerTraceId); + logger.debug("SimpleFrameworkFilter] Processing Key ["+PARTNER_TRACE_ID+"], value ["+partnerTraceId+"]"); + + String x_loan_token = inboundHeaderMap.getOrDefault(TransactionContextKeys.X_LOAN_TOKEN, ""); + filterHeaders.put(TransactionContextKeys.X_LOAN_TOKEN, x_loan_token); + logger.debug("SimpleFrameworkFilter] Processing Key ["+TransactionContextKeys.X_LOAN_TOKEN+"], value ["+x_loan_token+"]"); + + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java new file mode 100644 index 0000000..e8366cc --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java @@ -0,0 +1,28 @@ +package com.eactive.eai.adapter.http.client.impl.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); + if( bizJsonStr != null ) { + bizJsonStr.put("GUID", tempProp.getOrDefault(TransactionContextKeys.GUID, "") ); + } + } + + return bizJsonStr != null ? bizJsonStr.toJSONString() : returnMessage; + } +} diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java new file mode 100644 index 0000000..860f214 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java @@ -0,0 +1,97 @@ +package com.eactive.eai.adapter.http.client.impl.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 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 { + + logger.debug("TOSSBankFilter] PreFilter Processing Start!!"); + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Map inboundHeaderMap = getInboundHeaderProp(tempProp); + + 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+"]"); + } + } else { + /* APIM 거래추적자 */ + filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId); + logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+traceId+"]"); + } + 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()); + } + + return message; + } + + public Map getInboundHeaderProp(Properties prop) { + Properties header = new Properties(); + Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + try { + Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER); + if (headerObj instanceof Properties) { //tomcat + header = (Properties) headerObj; + for (String name : header.stringPropertyNames()) { + inboundHeaderMap.put(name, header.getProperty(name)); + } + } else if (headerObj instanceof String) { //weblogic + String str = (String) headerObj; + str = str.substring(1, str.length() - 1); + // key=value 쌍 분리 + String[] entries = str.split(","); + for (String entry : entries) { + String[] kv = entry.split("=", 2); + if (kv.length == 2) { + inboundHeaderMap.put(kv[0].trim(), kv[1].trim()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return inboundHeaderMap; + } + + @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/adapter/http/client/impl/filter/TraceBodyFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TraceBodyFilter.java new file mode 100644 index 0000000..d099504 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TraceBodyFilter.java @@ -0,0 +1,71 @@ +package com.eactive.eai.adapter.http.client.impl.filter; + +import java.util.Properties; + +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.util.Logger; +import com.nimbusds.jose.shaded.gson.JsonObject; + +public class TraceBodyFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String BIZ_HEADER = "header"; + public static final String GUID = "guid"; + public static final String TRACEID = "traceId"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + JSONObject bizJsonStr = null; + + if (message instanceof String) { + + bizJsonStr = (JSONObject) JSONValue.parse((String) message); + + if ( bizJsonStr == null ) return message; //json string이 아님. + + if (bizJsonStr.containsKey(BIZ_HEADER)) { + JSONObject bizHeader = (JSONObject) bizJsonStr.get(BIZ_HEADER); + + putBizHeaderData(bizHeader, tempProp); + + }else { + + JSONObject bizHeader = new JSONObject(); + bizJsonStr.put(BIZ_HEADER, bizHeader); + putBizHeaderData(bizHeader, tempProp); + + } + + } + + return bizJsonStr != null ? bizJsonStr.toJSONString() : message; + } + + static private void putBizHeaderData(JSONObject bizHeader, Properties tempProp) { + + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); + + bizHeader.put(GUID, guid); + logger.debug("Processing Key [" + GUID + "], value [" + guid + "]"); + + bizHeader.put(TRACEID, traceId); + logger.debug("Processing Key [" + TRACEID + "], value [" + traceId + "]"); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + // TODO Auto-generated method stub + return message; + } + +}