From f18100ae89089307d03efc1d2fdbbcb503b7ae5b Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 16 Sep 2025 10:42:17 +0900 Subject: [PATCH 01/10] =?UTF-8?q?logback=20=EC=84=A4=EC=A0=95=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/properties/env.D.properties | 2 +- .../WEB-INF/properties/env.P.properties | 4 ++-- .../WEB-INF/properties/env.T.properties | 2 +- src/main/resources/logback-dev.xml | 23 +++++++++++++++++++ src/main/resources/logback.xml | 22 +++++++++++++++++- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/WebContent/WEB-INF/properties/env.D.properties b/WebContent/WEB-INF/properties/env.D.properties index 0445e14..b83da1a 100644 --- a/WebContent/WEB-INF/properties/env.D.properties +++ b/WebContent/WEB-INF/properties/env.D.properties @@ -6,7 +6,7 @@ db.vendor=mariadb # - oracle10g : org.hibernate.dialect.Oracle10gDialect # - MySQL8 : org.hibernate.dialect.MySQL8Dialect # - MariaDB 10.3 : org.hibernate.dialect.MariaDB103Dialect -hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +hibernate.dialect=org.hibernate.dialect.Oracle12cDialect # Priority of the was -D option inst.Name=apimsSvr11 diff --git a/WebContent/WEB-INF/properties/env.P.properties b/WebContent/WEB-INF/properties/env.P.properties index 6702788..908dbda 100644 --- a/WebContent/WEB-INF/properties/env.P.properties +++ b/WebContent/WEB-INF/properties/env.P.properties @@ -6,7 +6,7 @@ db.vendor=mariadb # - oracle10g : org.hibernate.dialect.Oracle10gDialect # - MySQL8 : org.hibernate.dialect.MySQL8Dialect # - MariaDB 10.3 : org.hibernate.dialect.MariaDB103Dialect -hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +hibernate.dialect=org.hibernate.dialect.Oracle12cDialect # Priority of the was -D option inst.Name=admSvr11 @@ -15,4 +15,4 @@ eai.tableowner=EMSADM eai.systemmode=D eai.drmode=N # black / blue / green / orange / yellow -theme.color=orange +theme.color=orange \ No newline at end of file diff --git a/WebContent/WEB-INF/properties/env.T.properties b/WebContent/WEB-INF/properties/env.T.properties index 4eef0bc..806baae 100644 --- a/WebContent/WEB-INF/properties/env.T.properties +++ b/WebContent/WEB-INF/properties/env.T.properties @@ -6,7 +6,7 @@ db.vendor=mariadb # - oracle10g : org.hibernate.dialect.Oracle10gDialect # - MySQL8 : org.hibernate.dialect.MySQL8Dialect # - MariaDB 10.3 : org.hibernate.dialect.MariaDB103Dialect -hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +hibernate.dialect=org.hibernate.dialect.Oracle12cDialect # Priority of the was -D option inst.Name=admSvr11 diff --git a/src/main/resources/logback-dev.xml b/src/main/resources/logback-dev.xml index 61f9097..ca1d61f 100644 --- a/src/main/resources/logback-dev.xml +++ b/src/main/resources/logback-dev.xml @@ -27,6 +27,9 @@ 10 + + ${LOG_PATTERN} + + + utf-8 + ${LOG_PATTERN} + @@ -49,6 +56,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + @@ -60,6 +71,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + @@ -71,6 +86,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + ${LOG_HOME}/${PREFIX}_hibernate.log @@ -78,6 +97,10 @@ ${LOG_HOME}/${PREFIX}_hibernate.log-%d{yyyy-MM-dd} 10 + + utf-8 + ${LOG_PATTERN} + diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 9ee91f6..b16a368 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -2,7 +2,7 @@ - + @@ -16,6 +16,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + + + utf-8 + ${LOG_PATTERN} + @@ -38,6 +46,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + @@ -49,6 +61,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + @@ -60,6 +76,10 @@ 10 + + utf-8 + ${LOG_PATTERN} + From 020634238ecf2604b836f1b825360008796de3d8 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 22 Oct 2025 21:01:25 +0900 Subject: [PATCH 02/10] =?UTF-8?q?EAI=20=EC=97=B0=EB=8F=99=EB=B6=80=20?= =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/ext/kjb/ums/KjbUmsService.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java b/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java index 08c3ccd..8a3a534 100644 --- a/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java +++ b/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java @@ -40,7 +40,7 @@ public class KjbUmsService extends BaseService { KjbProperty prop = new KjbProperty(); prop.setEaiBatchUrl(monitoringPropertyService.getPropertyValue(PROP_GORUP_ID, PROP_EAI_BATCH_URL, "")); - prop.setEaiBatchSendDir(monitoringPropertyService.getPropertyValue(PROP_GORUP_ID, PROP_EAI_BATCH_SEND_DIR, "/Data/files/send")); + prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPropertyValue(PROP_GORUP_ID, PROP_EAI_BATCH_SEND_DIR, "/Data/files/send")); this.prop = prop; } @@ -60,34 +60,34 @@ public class KjbUmsService extends BaseService { } log.info("EAI Batch URL: {}", prop.getEaiBatchUrl()); - log.info("EAI Batch Send Dir: {}", prop.getEaiBatchSendDir()); + log.info("EAI Batch Send Dir: {}", prop.getUmsEaiBatchSendDir()); // 디렉토리 검사(쓰기 권한 포함) - Path sendDirPath = Paths.get(prop.getEaiBatchSendDir()); + Path sendDirPath = Paths.get(prop.getUmsEaiBatchSendDir()); if (!sendDirPath.toFile().exists()) { // 생성 시도 boolean created = sendDirPath.toFile().mkdirs(); if (!created) { - log.error("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: {}", prop.getEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: " + prop.getEaiBatchSendDir()); + log.error("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: {}", prop.getUmsEaiBatchSendDir()); + throw new IllegalStateException("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: " + prop.getUmsEaiBatchSendDir()); } } if (!sendDirPath.toFile().isDirectory()) { - log.error("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: {}", prop.getEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: " + prop.getEaiBatchSendDir()); + log.error("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: {}", prop.getUmsEaiBatchSendDir()); + throw new IllegalStateException("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: " + prop.getUmsEaiBatchSendDir()); } if (!sendDirPath.toFile().canWrite()) { - log.error("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: {}", prop.getEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: " + prop.getEaiBatchSendDir()); + log.error("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: {}", prop.getUmsEaiBatchSendDir()); + throw new IllegalStateException("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: " + prop.getUmsEaiBatchSendDir()); } } public void sendEmail(MessageRequest messageRequest) { - log.debug("sendEmail() called - EAI_BATCH_URL: {}, EAI_BATCH_SEND_DIR: {}", prop.getEaiBatchUrl(), prop.getEaiBatchSendDir()); + log.debug("sendEmail() called - EAI_BATCH_URL: {}, EAI_BATCH_SEND_DIR: {}", prop.getEaiBatchUrl(), prop.getUmsEaiBatchSendDir()); log.debug("MessageRequest ID: {}, Email: {}", messageRequest.getId(), messageRequest.getEmail()); From d18db6acb9ff96900cac50f435ed89b5e410f5b2 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 28 Oct 2025 11:32:24 +0900 Subject: [PATCH 03/10] =?UTF-8?q?header=20debug=20jsp=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/addon/request-header.jsp | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 WebContent/addon/request-header.jsp diff --git a/WebContent/addon/request-header.jsp b/WebContent/addon/request-header.jsp new file mode 100644 index 0000000..e3bde54 --- /dev/null +++ b/WebContent/addon/request-header.jsp @@ -0,0 +1,11 @@ +<%@ page import="java.util.Enumeration" %> +<%@page contentType="text/html; charset=UTF-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true"%> +<% + Enumeration names = request.getHeaderNames(); + while (names.hasMoreElements()) { + String name = names.nextElement(); + out.println(name + ": " + request.getHeader(name)); + } +%> +--------- +request.getScheme(): <%=request.getScheme()%> \ No newline at end of file From 9ad31549d0a4f029697ee5828f5a7ff19764f624 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 5 Nov 2025 12:24:55 +0900 Subject: [PATCH 04/10] =?UTF-8?q?ums=20dispatcher=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kjb-docs/Property 설정.md | 39 ++++++++ .../onl/common/service/UmsDispatchJob.java | 20 ++++ .../service/ums/UmsDispatchService.java | 92 ++++++++++++++----- .../rms/onl/common/service/ums/UmsSender.java | 4 + ...jbUmsService.java => KjbEmailService.java} | 33 +++++-- 5 files changed, 155 insertions(+), 33 deletions(-) create mode 100644 kjb-docs/Property 설정.md rename src/main/java/com/eactive/ext/kjb/ums/{KjbUmsService.java => KjbEmailService.java} (76%) diff --git a/kjb-docs/Property 설정.md b/kjb-docs/Property 설정.md new file mode 100644 index 0000000..e6c9739 --- /dev/null +++ b/kjb-docs/Property 설정.md @@ -0,0 +1,39 @@ +# 광주은행용 Property 설정 +## 참고 Class +- com.eactive.ext.kjb.common.KjbProperty + +## Monitoring +### UMS 관련 (kjb.ums) +- 실제 광주은행 내에서는 UMS 는 SMS/LMS/알림톡 등 만 담당. +- 이메일 발송은 별도 시스템이 있음 (JSON 형식의 파일로 EAI 배치 이용 연계) + +- kjb.eai_batch.url + - 개발 : http://172.31.32.111:10230/BATAppWeb/EaiBatCall + - 검증 : http://172.31.33.111:10430/BATAppWeb/EaiBatCall + - 운영 : http://172.21.1.40:10860/BATAppWeb/EaiBatCall +- kjb.ums.host_url + - 개발 : http://172.31.35.144:9021 + - 운영 : +- kjb.ums.api_key + - 개발 API KEY(192.168.240.176) : `7cca6d58-e4f7-474d-9edd-525806bc99ff` + - 운영 API KEY(192.168.132.77 / 192.168.132.78 / 192.168.157.77 ) : `6a40a69f-5614-485b-8d0f-6fb2e2e51bfe` +- kjb.ums.eai_batch.send_dir : /Data/eapim/portal/sendmail/snd +- kjb.ums.eai_batch.backup_dir : /Data/eapim/portal/sendmail/bak + + +## 개발 Property + +| Key | 이름 | Value | 분류 | | +| ------------------------------------ | ------------------------ | ----------------------------------------------- | --- | --- | +| kjb.eai_batch.url | EAI 배치 호출 주소 | http://172.31.32.111:10230/BATAppWeb/EaiBatCall | 이메일 | | +| kjb.ums.eai_batch.connection_timeout | EAI 배치 커넥션 타임아웃(seconds) | 5 | 이메일 | | +| kjb.ums.eai_batch.response_timeout | EAI 배치 응답 타임아웃(seconds) | 10 | 이메일 | | +| kjb.ums.eai_batch.send_dir | EAI 배치 발송용 디렉토리 | /Data/eapim/portal/sendmail/snd | 이메일 | | +| kjb.ums.eai_batch.backup_dir | EAI 배치 발송 이후 백업 디렉토리 | /Data/eapim/portal/sendmail/bak | 이메일 | | +| kjb.ums.eai_batch.interface_id | 고객이메일발송용 EAI 배치 인터페이스 | UAGFF00001UIE | 알림톡 | | +| kjb.ums.host_url | UMS 호출 주소 | http://172.31.35.144:9021 | 알림톡 | | +| kjb.ums.api_key | UMS API Key | 7cca6d58-e4f7-474d-9edd-525806bc99ff | 알림톡 | | +| kjb.ums.connection_timeout | UMS 커넥션 타임아웃(seconds) | 5 | 알림톡 | | +| kjb.ums.response_timeout | UMS 응답 타임아웃(seconds) | 10 | 알림톡 | | + +- \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java b/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java index 9b2c31c..1492d23 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java @@ -2,6 +2,7 @@ package com.eactive.eai.rms.onl.common.service; import com.eactive.eai.rms.onl.common.service.ums.UmsDispatchService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; @@ -28,6 +29,25 @@ public class UmsDispatchJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("Starting Message Dispatch Job..."); + + // inst.Name 이 지정된 경우 해당 인스턴스에서만 동작 + String jobInstName = context.getJobDetail().getJobDataMap().getString("inst.Name"); + if (StringUtils.isNotEmpty(jobInstName)) { + log.debug("Job 실행 인스턴스 명이 지정되어 있음 - {}", jobInstName); + + jobInstName = jobInstName.trim(); + String instanceName = System.getProperty("inst.Name"); + if (StringUtils.isNotEmpty(instanceName)) { + log.debug("현재 인스턴스 명 : {}", instanceName); + instanceName = instanceName.trim(); + + if (!jobInstName.equalsIgnoreCase(instanceName)) { + log.debug("Job 인스턴스명과 현재 인스턴스명이 다름. 종료 처리"); + return; + } + } + } + try { umsDispatchService.processMessages(); } catch (Exception e) { diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java index ad361f8..30951e5 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java @@ -1,9 +1,13 @@ package com.eactive.eai.rms.onl.common.service.ums; import com.eactive.apim.portal.template.entity.MessageRequest; - -import edu.emory.mathcs.backport.java.util.Collections; +import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; +import com.eactive.ext.kjb.common.KjbProperty; +import com.eactive.ext.kjb.safedb.KjbSafedbWrapper; +import com.eactive.ext.kjb.ums.KjbEmailService; +import com.eactive.ext.kjb.ums.KjbUmsService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.NotImplementedException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -15,15 +19,17 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.io.IOException; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; -import java.util.concurrent.*; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; @Slf4j @Service @Transactional(transactionManager = "transactionManagerForEMS") public class UmsDispatchService { + public static final String PROP_GORUP_ID = "Monitoring"; private final ThreadPoolExecutor executorService; private final TransactionTemplate transactionTemplate; @@ -36,15 +42,23 @@ public class UmsDispatchService { @PersistenceContext(unitName = "entityManagerFactoryForEMS") private EntityManager entityManager; - @Autowired - private UmsSender umsSender; +// private final KjbEmailService kjbEmailService; +// private final KjbSafedbWrapper kjbSafedbWrapper; +// private final MonitoringPropertyService monitoringPropertyService; + + private final KjbUmsService kjbUmsService; - @Autowired - private StandardMessageFactory messageFactory; @Autowired public UmsDispatchService( - @Qualifier("transactionManagerForEMS") PlatformTransactionManager transactionManager) { + @Qualifier("transactionManagerForEMS") PlatformTransactionManager transactionManager, +// KjbSafedbWrapper kjbSafedbWrapper, + MonitoringPropertyService monitoringPropertyService + ) { +// this.kjbEmailService = kjbEmailService; +// this.kjbSafedbWrapper = kjbSafedbWrapper; +// this.monitoringPropertyService = monitoringPropertyService; + this.executorService = new ThreadPoolExecutor( CORE_POOL_SIZE, MAX_POOL_SIZE, @@ -56,6 +70,17 @@ public class UmsDispatchService { this.transactionTemplate = new TransactionTemplate(transactionManager); log.debug("UmsDispatchService initialized with thread pool - core: {}, max: {}, queue: {}", CORE_POOL_SIZE, MAX_POOL_SIZE, QUEUE_CAPACITY); + + + KjbProperty prop = new KjbProperty(); + prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.url")); + prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.send_dir")); + prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir")); + prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id")); + prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url")); + prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key")); + + this.kjbUmsService = new KjbUmsService(prop); } @SuppressWarnings("unchecked") @@ -110,7 +135,18 @@ public class UmsDispatchService { try { transactionTemplate.execute(status -> { try { - processMessage(message); + // 광주은행에서는 사용하지 않는 메소드 +// processMessage(message); + + if (KjbUmsService.isAllowChannel(message)) { + kjbUmsService.send(message); + } + + if (KjbEmailService.isAllowChannel(message)) { + throw new NotImplementedException(); +// kjbEmailService.sendEmail(message); + } + return null; } catch (Exception e) { log.error("Failed to process message: {} - Error: {}", @@ -127,21 +163,27 @@ public class UmsDispatchService { }); } - public void processMessage(MessageRequest message) throws IOException { - try { - String standardMessage = messageFactory.createMessage(message); - log.debug("Processing message ID: {} - Type: {}", message.getId(), message.getMessageType()); - - umsSender.sendMessage(standardMessage); - updateMessageStatus(message, "SENT"); - log.debug("Successfully processed and sent message ID: {}", message.getId()); - } catch (Exception e) { - log.error("Message processing failed for ID: {} - Error: {}", - message.getId(), e.getMessage(), e); - updateMessageStatus(message, "FAILED"); - throw e; - } - } + /** + * kbank 방식으로 광주은행에서는 사용하지 않음 + * @param message + * @throws IOException + */ +// @Deprecated +// public void processMessage(MessageRequest message) throws IOException { +// try { +// String standardMessage = messageFactory.createMessage(message); +// log.debug("Processing message ID: {} - Type: {}", message.getId(), message.getMessageType()); +// +// umsSender.sendMessage(standardMessage); +// updateMessageStatus(message, "SENT"); +// log.debug("Successfully processed and sent message ID: {}", message.getId()); +// } catch (Exception e) { +// log.error("Message processing failed for ID: {} - Error: {}", +// message.getId(), e.getMessage(), e); +// updateMessageStatus(message, "FAILED"); +// throw e; +// } +// } public void updateMessageStatus(MessageRequest message, String status) { message.setRequestStatus(status); diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsSender.java b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsSender.java index cd2ff04..4a95ca1 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsSender.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsSender.java @@ -16,8 +16,12 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.nio.charset.StandardCharsets; +/** + * 25.11.05 - 광주은행 미사용 클래스 + */ @Slf4j @Component +@Deprecated public class UmsSender { private final MonitoringPropertyService monitoringPropertyService; diff --git a/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java b/src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java similarity index 76% rename from src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java rename to src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java index 8a3a534..334a336 100644 --- a/src/main/java/com/eactive/ext/kjb/ums/KjbUmsService.java +++ b/src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java @@ -1,5 +1,6 @@ package com.eactive.ext.kjb.ums; +import com.eactive.apim.portal.template.entity.MessageCode; import com.eactive.apim.portal.template.entity.MessageRequest; import com.eactive.eai.rms.common.base.BaseService; import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; @@ -22,7 +23,9 @@ import java.util.Arrays; @Service @Transactional(transactionManager = "transactionManagerForEMS") @Slf4j -public class KjbUmsService extends BaseService { +public class KjbEmailService extends BaseService { + public final static int[] ALLOW_CHANNELS = { MessageCode.Channels.EMAIL.getValue() }; + public static final String PROP_GORUP_ID = "Monitoring"; public static final String PROP_EAI_BATCH_URL = "kjb.ums.eai_batch.url"; public static final String PROP_EAI_BATCH_SEND_DIR = "kjb.ums.eai_batch.send_dir"; @@ -34,19 +37,33 @@ public class KjbUmsService extends BaseService { @Autowired - public KjbUmsService(KjbSafedbWrapper kjbSafedbWrapper, - MonitoringPropertyService monitoringPropertyService) { - this.kjbSafedbWrapper = kjbSafedbWrapper; + public KjbEmailService(MonitoringPropertyService monitoringPropertyService) { + this.kjbSafedbWrapper = KjbSafedbWrapper.getInstance(); KjbProperty prop = new KjbProperty(); - prop.setEaiBatchUrl(monitoringPropertyService.getPropertyValue(PROP_GORUP_ID, PROP_EAI_BATCH_URL, "")); - prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPropertyValue(PROP_GORUP_ID, PROP_EAI_BATCH_SEND_DIR, "/Data/files/send")); + prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, PROP_EAI_BATCH_URL)); + prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, PROP_EAI_BATCH_SEND_DIR)); + prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir")); + prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id")); + prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url")); + prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key")); this.prop = prop; } - public KjbUmsService(KjbSafedbWrapper kjbSafedbWrapper, - KjbProperty property) { + + public static boolean isAllowChannel(MessageRequest message) { + for (int channel : ALLOW_CHANNELS) { + if ((message.getMessageCode().getChannels() & channel) == channel) { + return true; + } + } + return false; + } + + + public KjbEmailService(KjbSafedbWrapper kjbSafedbWrapper, + KjbProperty property) { this.kjbSafedbWrapper = kjbSafedbWrapper; this.prop = property; From 3675f4048921067784869d42850a56d2effe811c Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 5 Nov 2025 19:26:15 +0900 Subject: [PATCH 05/10] =?UTF-8?q?umsDispatums=20dispatcher=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/META-INF/context.xml | 41 ------------------- kjb-docs/Property 설정.md | 15 ++++++- .../man/scheduler/JobHistoryService.java | 2 +- .../onl/common/service/UmsDispatchJob.java | 19 +++++---- 4 files changed, 27 insertions(+), 50 deletions(-) delete mode 100644 WebContent/META-INF/context.xml diff --git a/WebContent/META-INF/context.xml b/WebContent/META-INF/context.xml deleted file mode 100644 index abcab3e..0000000 --- a/WebContent/META-INF/context.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kjb-docs/Property 설정.md b/kjb-docs/Property 설정.md index e6c9739..f46ea6a 100644 --- a/kjb-docs/Property 설정.md +++ b/kjb-docs/Property 설정.md @@ -35,5 +35,18 @@ | kjb.ums.api_key | UMS API Key | 7cca6d58-e4f7-474d-9edd-525806bc99ff | 알림톡 | | | kjb.ums.connection_timeout | UMS 커넥션 타임아웃(seconds) | 5 | 알림톡 | | | kjb.ums.response_timeout | UMS 응답 타임아웃(seconds) | 10 | 알림톡 | | +| | | | | | -- \ No newline at end of file +```sql +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai_batch.url', 'http://172.31.32.111:10230/BATAppWeb/EaiBatCall'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.connection_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.response_timeout', '10'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '/Data/eapim/portal/sendmail/snd'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '/Data/eapim/portal/sendmail/bak'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', 'UAGFF00001UIE'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host_url', 'http://172.31.35.144:9021'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '7cca6d58-e4f7-474d-9edd-525806bc99ff'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '10'); + +``` \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/data/entity/man/scheduler/JobHistoryService.java b/src/main/java/com/eactive/eai/rms/data/entity/man/scheduler/JobHistoryService.java index 6021ccc..25f2265 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/man/scheduler/JobHistoryService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/man/scheduler/JobHistoryService.java @@ -52,7 +52,7 @@ public class JobHistoryService extends AbstractEMSDataSerivce{}, jobName-->{}, instanceName-->{}", rctStatus, jobName, instanceName); + // log.info("[DHJEONG]1_rctStatus-->{}, jobName-->{}, instanceName-->{}", rctStatus, jobName, instanceName); if (!status.equals(rctStatus) || !"E".equals(jobInfo.getChkStatus())) { // 'Y' 이면 무조건 등록, 'E' 이면 ==> Status 바뀌면 등록 diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java b/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java index 1492d23..993e165 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/UmsDispatchJob.java @@ -8,6 +8,10 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + /** * Admin Job Configuration * ---------------------- @@ -18,30 +22,31 @@ import org.springframework.beans.factory.annotation.Autowired; // Cron Expression: */5 * * * * ? @Slf4j public class UmsDispatchJob implements Job { - + private final UmsDispatchService umsDispatchService; - + @Autowired public UmsDispatchJob(UmsDispatchService umsDispatchService) { this.umsDispatchService = umsDispatchService; } - + @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("Starting Message Dispatch Job..."); // inst.Name 이 지정된 경우 해당 인스턴스에서만 동작 - String jobInstName = context.getJobDetail().getJobDataMap().getString("inst.Name"); + String jobInstName = context.getJobDetail().getJobDataMap().getString("execute.instances"); if (StringUtils.isNotEmpty(jobInstName)) { log.debug("Job 실행 인스턴스 명이 지정되어 있음 - {}", jobInstName); + jobInstName = jobInstName.toLowerCase(); + Set propInstances = Arrays.stream(jobInstName.split(",")).map(String::trim).collect(Collectors.toSet()); - jobInstName = jobInstName.trim(); String instanceName = System.getProperty("inst.Name"); if (StringUtils.isNotEmpty(instanceName)) { log.debug("현재 인스턴스 명 : {}", instanceName); - instanceName = instanceName.trim(); + instanceName = instanceName.trim().toLowerCase(); - if (!jobInstName.equalsIgnoreCase(instanceName)) { + if (!propInstances.contains(instanceName)) { log.debug("Job 인스턴스명과 현재 인스턴스명이 다름. 종료 처리"); return; } From 398c76f7db79203790fc0d805c3816eedda8ba75 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Fri, 7 Nov 2025 13:14:58 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EB=AC=BC=20=EC=9E=91=EC=84=B1=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/WEB-INF/web.xml | 18 +++++------------- .../portalnotice/PortalNoticeManService.java | 17 ++++++++++++++--- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml index aad14c7..f108b9c 100644 --- a/WebContent/WEB-INF/web.xml +++ b/WebContent/WEB-INF/web.xml @@ -51,6 +51,11 @@ encodingFilter *.file + + + encodingFilter + *.json + - - springapp diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/portalnotice/PortalNoticeManService.java b/src/main/java/com/eactive/eai/rms/onl/apim/portalnotice/PortalNoticeManService.java index 9e125a3..64ffe55 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/portalnotice/PortalNoticeManService.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/portalnotice/PortalNoticeManService.java @@ -5,9 +5,11 @@ import com.eactive.apim.portal.file.entity.FileInfo; import com.eactive.apim.portal.file.service.FileService; import com.eactive.apim.portal.file.service.FileTypeContext; import com.eactive.apim.portal.portalNotice.entity.PortalNotice; +import com.eactive.eai.common.util.ContainerUtil; import com.eactive.eai.rms.common.base.BaseService; import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeService; import com.eactive.eai.rms.data.entity.onl.apim.portalnotice.PortalNoticeUISearch; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -18,19 +20,28 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Optional; @Service @Transactional(transactionManager = "transactionManagerForEMS") +@Slf4j public class PortalNoticeManService extends BaseService { private final PortalNoticeService portalNoticeService; private final PortalNoticeUIMapper portalNoticeUIMapper; - private final FileService fileService; + private final FileService fileService; private String decodeString(String value) { -// return new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + if (ContainerUtil.get() == ContainerUtil.TOMCAT) { + try { + return new String(value.getBytes("euc-kr"), StandardCharsets.UTF_8); + } catch (UnsupportedEncodingException e) { + log.warn("Failed euc-kr to UTF-8", e); + return value; + } + } return new String(value.getBytes(Charset.defaultCharset()), StandardCharsets.UTF_8); } @@ -102,7 +113,7 @@ public class PortalNoticeManService extends BaseService { if (file != null && !file.isEmpty()) { // 새로운 파일이 업로드된 경우에만 처리 String decodedFileName = decodeString(portalNoticeUI.getFileName()); FileTypeContext.setFileType("notice"); - FileInfo fileInfo = fileService.createOrUpdateSingleFile(portalNotice.getFileId(), file, decodedFileName); + FileInfo fileInfo = fileService.createOrUpdateSingleFile(portalNotice.getFileId(), file, decodedFileName, true); if (fileInfo != null) { portalNotice.setFileId(fileInfo.getFileId()); From af7ed03492f517500b5d362c15fbf75e73eab459 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Fri, 7 Nov 2025 19:37:40 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=20=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=B8=EC=A7=80=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsp/onl/apim/portaluser/portalUserMan.jsp | 6 ++++-- .../onl/apim/portaluser/portalUserManDetail.jsp | 16 ++++++++++++++++ .../rms/onl/apim/portaluser/PortalUserUI.java | 1 + .../message/LocaleMessage_ko.properties | 1 + 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp b/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp index 017c49f..35cadcc 100644 --- a/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp +++ b/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp @@ -92,7 +92,8 @@ '<%= localeMessage.getString("portalUser.roleName") %>', '<%= localeMessage.getString("portalUser.userStatus") %>', '<%= localeMessage.getString("portalUser.createOn") %>', - '<%= localeMessage.getString("portalUser.approvalStatus") %>' + '<%= localeMessage.getString("portalUser.approvalStatus") %>', + '<%= localeMessage.getString("portalUser.accountLockYn") %>' ], colModel: [ {name: 'rowNum', align: 'center', width: '30', sortable: false}, @@ -104,7 +105,8 @@ {name: 'roleCodeDescription', align: 'center', width: "80"}, {name: 'userStatusDescription', align: 'center', width: "50"}, {name: 'createdDate', align: 'center', width: "100", formatter: timeStampFormat}, - {name: 'approvalStatusDescription', align: 'center', width: "50"} + {name: 'approvalStatusDescription', align: 'center', width: "50"}, + {name: 'accountLockYn', align: 'center', width: "50"} ], jsonReader: { repeatitems: false diff --git a/WebContent/jsp/onl/apim/portaluser/portalUserManDetail.jsp b/WebContent/jsp/onl/apim/portaluser/portalUserManDetail.jsp index b970798..533c8a7 100644 --- a/WebContent/jsp/onl/apim/portaluser/portalUserManDetail.jsp +++ b/WebContent/jsp/onl/apim/portaluser/portalUserManDetail.jsp @@ -184,6 +184,9 @@ } else { $('#orgInfoSection').hide(); } + + $("select[name=accountLockYn]").val(data.accountLockYn); + // 25.09.23 - 마스킹 해제 상태를 기본으로 적용 / Rinjae updateButtonStates($("#userStatus").val(), true); @@ -633,6 +636,19 @@ + + <%= getRequiredLabel(localeMessage.getString("portalUser.accountLockYn")) %> + +
+ +
+ + + + diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/portaluser/PortalUserUI.java b/src/main/java/com/eactive/eai/rms/onl/apim/portaluser/PortalUserUI.java index 475ecda..16094a5 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/portaluser/PortalUserUI.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/portaluser/PortalUserUI.java @@ -50,4 +50,5 @@ public class PortalUserUI { @DateTimeFormat(pattern = "yyyyMMddHHmmss") private LocalDateTime lastModifiedDate; + private String accountLockYn; } diff --git a/src/main/resources/message/LocaleMessage_ko.properties b/src/main/resources/message/LocaleMessage_ko.properties index 61a0e22..15179a2 100644 --- a/src/main/resources/message/LocaleMessage_ko.properties +++ b/src/main/resources/message/LocaleMessage_ko.properties @@ -2728,6 +2728,7 @@ portalUser.mobile = \uD734\uB300\uD3F0\uBC88\uD638 portalUser.roleName = \uAD8C\uD55C portalUser.emailAddr =\uC774\uBA54\uC77C \uC544\uC774\uB514 portalUser.approvalStatus =\uC2B9\uC778\uC0C1\uD0DC +portalUser.accountLockYn =\uCC28\uB2E8\uC5EC\uBD80 portalUserDetail.title =\uAC00\uC785\uC790\uC815\uBCF4 portalOrgDetail.title=\uBC95\uC778 \uC815\uBCF4 From 20aaf13b434050b0dce9727d18e178047a8c2ca8 Mon Sep 17 00:00:00 2001 From: goseoan Date: Mon, 10 Nov 2025 13:22:53 +0900 Subject: [PATCH 08/10] =?UTF-8?q?XSS=20checkReturnUrl=20Debug=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/rms/common/filter/CrossScriptingFilter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java b/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java index f7426c7..8d5da1e 100644 --- a/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java +++ b/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java @@ -38,9 +38,9 @@ public class CrossScriptingFilter implements Filter { String servletPath = request.getServletPath(); String baseUrl = uri.replace(servletPath, ""); boolean isValidUrl = returnUrl.startsWith(baseUrl); -// System.out.println("checkReturnUrl => "+ uri + " : "+ servletPath); -// System.out.println("checkReturnUrl => "+ baseUrl + " : "+ returnUrl); -// System.out.println("checkReturnUrl => "+ returnUrl + " : "+ isValidUrl); + System.out.println("checkReturnUrl => "+ uri + " : "+ servletPath); + System.out.println("checkReturnUrl => "+ baseUrl + " : "+ returnUrl); + System.out.println("checkReturnUrl => "+ returnUrl + " : "+ isValidUrl); return isValidUrl; } @@ -52,7 +52,7 @@ public class CrossScriptingFilter implements Filter { String returnUrl = (String)request.getParameter("returnUrl"); if(returnUrl != null) { if(!checkReturnUrl(request, returnUrl)) { - System.out.println("CrossScriptingFilter] bad request. - " + returnUrl); + System.out.println("[CrossScriptingFilter] bad request. - " + returnUrl); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "bad request. - "+returnUrl); return; } From 333b186342e6f080f74ebc650db7d92726946f7d Mon Sep 17 00:00:00 2001 From: Rinjae Date: Mon, 10 Nov 2025 16:49:21 +0900 Subject: [PATCH 09/10] =?UTF-8?q?property=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kjb-docs/Property 설정.md | 29 +++- .../service/ums/UmsDispatchService.java | 43 +++--- .../eactive/ext/kjb/ums/KjbEmailService.java | 142 ------------------ .../ext/kjb/util/KjbPropertyInjector.java | 62 ++++++++ 4 files changed, 113 insertions(+), 163 deletions(-) delete mode 100644 src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java create mode 100644 src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java diff --git a/kjb-docs/Property 설정.md b/kjb-docs/Property 설정.md index f46ea6a..9356d8c 100644 --- a/kjb-docs/Property 설정.md +++ b/kjb-docs/Property 설정.md @@ -38,15 +38,38 @@ | | | | | | ```sql +-- 개발 서버용 insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai_batch.url', 'http://172.31.32.111:10230/BATAppWeb/EaiBatCall'); -insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.connection_timeout', '5'); -insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.response_timeout', '10'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', '/Data/eapim/portal/sendmail/snd'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', '/Data/eapim/portal/sendmail/bak'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', '/Data/eapim/portal/sendmail/bak'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', 'UAGFF00001UIE'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host_url', 'http://172.31.35.144:9021'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', '7cca6d58-e4f7-474d-9edd-525806bc99ff'); insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5'); -insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '10'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10'); + +-- autogen template +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.url', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.connection_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.response_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.timeout', '10'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.eai.batch.charset', 'euc-kr'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.send_dir', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.backup_dir', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.error_dir', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.interface_id', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.eai_batch.retention_date', '60'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.host', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.api_key', ''); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.connection_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.response_timeout', '5'); +insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', 'kjb.ums.timeout', '10'); ``` \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java index 30951e5..549ce34 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java @@ -1,13 +1,13 @@ package com.eactive.eai.rms.onl.common.service.ums; import com.eactive.apim.portal.template.entity.MessageRequest; +import com.eactive.apim.portal.template.repository.MessageRequestRepository; import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; import com.eactive.ext.kjb.common.KjbProperty; -import com.eactive.ext.kjb.safedb.KjbSafedbWrapper; -import com.eactive.ext.kjb.ums.KjbEmailService; +import com.eactive.ext.kjb.ums.KjbEmailSendModule; import com.eactive.ext.kjb.ums.KjbUmsService; +import com.eactive.ext.kjb.util.KjbPropertyInjector; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.NotImplementedException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -42,19 +42,21 @@ public class UmsDispatchService { @PersistenceContext(unitName = "entityManagerFactoryForEMS") private EntityManager entityManager; -// private final KjbEmailService kjbEmailService; -// private final KjbSafedbWrapper kjbSafedbWrapper; -// private final MonitoringPropertyService monitoringPropertyService; - + private final MessageRequestRepository messageRequestRepository; private final KjbUmsService kjbUmsService; + private final KjbEmailSendModule kjbEmailSendModule; + private final KjbPropertyInjector kjbPropertyInjector; @Autowired public UmsDispatchService( @Qualifier("transactionManagerForEMS") PlatformTransactionManager transactionManager, -// KjbSafedbWrapper kjbSafedbWrapper, - MonitoringPropertyService monitoringPropertyService + MonitoringPropertyService monitoringPropertyService, + MessageRequestRepository messageRequestRepository ) { + this.kjbPropertyInjector = new KjbPropertyInjector(monitoringPropertyService, PROP_GORUP_ID); + + this.messageRequestRepository = messageRequestRepository; // this.kjbEmailService = kjbEmailService; // this.kjbSafedbWrapper = kjbSafedbWrapper; // this.monitoringPropertyService = monitoringPropertyService; @@ -73,14 +75,17 @@ public class UmsDispatchService { KjbProperty prop = new KjbProperty(); - prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.url")); - prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.send_dir")); - prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir")); - prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id")); - prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url")); - prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key")); +// prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.url")); +// prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.send_dir")); +// prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir")); +// prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id")); +// prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url")); +// prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key")); + prop = kjbPropertyInjector.inject(prop); this.kjbUmsService = new KjbUmsService(prop); + + this.kjbEmailSendModule = KjbEmailSendModule.getInstance(prop, messageRequestRepository); } @SuppressWarnings("unchecked") @@ -123,6 +128,9 @@ public class UmsDispatchService { } } else { log.info("No pending messages found"); + + // 발송 메세지가 없을 때 파일 삭제 처리 진행 + } } @@ -142,9 +150,8 @@ public class UmsDispatchService { kjbUmsService.send(message); } - if (KjbEmailService.isAllowChannel(message)) { - throw new NotImplementedException(); -// kjbEmailService.sendEmail(message); + if (KjbEmailSendModule.isAllowChannel(message)) { + kjbEmailSendModule.sendEmail(message); } return null; diff --git a/src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java b/src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java deleted file mode 100644 index 334a336..0000000 --- a/src/main/java/com/eactive/ext/kjb/ums/KjbEmailService.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.eactive.ext.kjb.ums; - -import com.eactive.apim.portal.template.entity.MessageCode; -import com.eactive.apim.portal.template.entity.MessageRequest; -import com.eactive.eai.rms.common.base.BaseService; -import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; -import com.eactive.ext.kjb.common.KjbProperty; -import com.eactive.ext.kjb.safedb.KjbSafedbWrapper; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.io.UnsupportedEncodingException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; - -@Service -@Transactional(transactionManager = "transactionManagerForEMS") -@Slf4j -public class KjbEmailService extends BaseService { - public final static int[] ALLOW_CHANNELS = { MessageCode.Channels.EMAIL.getValue() }; - - public static final String PROP_GORUP_ID = "Monitoring"; - public static final String PROP_EAI_BATCH_URL = "kjb.ums.eai_batch.url"; - public static final String PROP_EAI_BATCH_SEND_DIR = "kjb.ums.eai_batch.send_dir"; - - - private final KjbSafedbWrapper kjbSafedbWrapper; - - private final KjbProperty prop; - - - @Autowired - public KjbEmailService(MonitoringPropertyService monitoringPropertyService) { - this.kjbSafedbWrapper = KjbSafedbWrapper.getInstance(); - - KjbProperty prop = new KjbProperty(); - prop.setEaiBatchUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, PROP_EAI_BATCH_URL)); - prop.setUmsEaiBatchSendDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, PROP_EAI_BATCH_SEND_DIR)); - prop.setUmsEaiBatchBackupDir(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.backup_dir")); - prop.setUmsEaiBatchInterfaceId(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.eai_batch.interface_id")); - prop.setUmsHostUrl(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.host_url")); - prop.setUmsApiKey(monitoringPropertyService.getPrpty2ValById(PROP_GORUP_ID, "kjb.ums.api_key")); - - this.prop = prop; - } - - - public static boolean isAllowChannel(MessageRequest message) { - for (int channel : ALLOW_CHANNELS) { - if ((message.getMessageCode().getChannels() & channel) == channel) { - return true; - } - } - return false; - } - - - public KjbEmailService(KjbSafedbWrapper kjbSafedbWrapper, - KjbProperty property) { - this.kjbSafedbWrapper = kjbSafedbWrapper; - this.prop = property; - - init(); - } - - - private void init() { - if (prop.getEaiBatchUrl().isEmpty()) { - log.warn("{} 가 설정되지 않음. 실제 EAI 배치 연동 없이 동작함", PROP_EAI_BATCH_URL); - } - - log.info("EAI Batch URL: {}", prop.getEaiBatchUrl()); - log.info("EAI Batch Send Dir: {}", prop.getUmsEaiBatchSendDir()); - - - // 디렉토리 검사(쓰기 권한 포함) - Path sendDirPath = Paths.get(prop.getUmsEaiBatchSendDir()); - if (!sendDirPath.toFile().exists()) { - // 생성 시도 - boolean created = sendDirPath.toFile().mkdirs(); - if (!created) { - log.error("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: {}", prop.getUmsEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 디렉토리를 생성할 수 없음: " + prop.getUmsEaiBatchSendDir()); - } - } - - if (!sendDirPath.toFile().isDirectory()) { - log.error("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: {}", prop.getUmsEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 가 디렉토리가 아님: " + prop.getUmsEaiBatchSendDir()); - } - - if (!sendDirPath.toFile().canWrite()) { - log.error("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: {}", prop.getUmsEaiBatchSendDir()); - throw new IllegalStateException("EAI_BATCH_SEND_DIR 에 쓰기 권한이 없음: " + prop.getUmsEaiBatchSendDir()); - } - } - - - public void sendEmail(MessageRequest messageRequest) { - log.debug("sendEmail() called - EAI_BATCH_URL: {}, EAI_BATCH_SEND_DIR: {}", prop.getEaiBatchUrl(), prop.getUmsEaiBatchSendDir()); - log.debug("MessageRequest ID: {}, Email: {}", messageRequest.getId(), messageRequest.getEmail()); - - - if (StringUtils.isEmpty(messageRequest.getId())) { - log.warn("MessageRequest ID is empty"); - throw new IllegalArgumentException("MessageRequest ID is required"); - } - - if (StringUtils.isEmpty(messageRequest.getEmail())) { - log.warn("MessageRequest Email is empty for ID: {}", messageRequest.getId()); - throw new IllegalArgumentException("MessageRequest Email is required for ID: " + messageRequest.getId()); - } - - - String filename = "EMAIL_" + messageRequest.getId() + ".json"; - - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("EMAIL", kjbSafedbWrapper.encryptNotRnnoString(messageRequest.getEmail())); - - - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String jsonString = gson.toJson(jsonObject); - byte[] jsonBytes = null; - - try { - jsonBytes = jsonString.getBytes("euc-kr"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - - } - - log.debug("Generated JSON({} bytes): {}", jsonBytes.length, jsonString); - log.debug("euc-kr first 10 bytes: {}...", Arrays.toString(Arrays.copyOfRange(jsonBytes, 0, 10))); - } -} diff --git a/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java b/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java new file mode 100644 index 0000000..8b4ac6c --- /dev/null +++ b/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java @@ -0,0 +1,62 @@ +package com.eactive.ext.kjb.util; + +import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; +import com.eactive.ext.kjb.common.KjbProperty; +import com.eactive.ext.kjb.common.KjbPropertyValue; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; + +@Slf4j +public class KjbPropertyInjector { + private final MonitoringPropertyService monitoringPropertyService; + private final String groupId; + + + public KjbPropertyInjector(MonitoringPropertyService monitoringPropertyService, String groupId) { + this.monitoringPropertyService = monitoringPropertyService; + this.groupId = groupId; + } + + public T inject(T property) { + Class clazz = property.getClass(); + + for (Field field : clazz.getDeclaredFields()) { + KjbPropertyValue anno = field.getAnnotation(KjbPropertyValue.class); + + if (anno != null) { + String key = anno.key(); + String rawValue = monitoringPropertyService.getPropertyValue(groupId, key, anno.defaultValue()); + Object convertedValue = convertValue(field.getType(), rawValue); + + field.setAccessible(true); + try { + field.set(property, convertedValue); + } catch (IllegalAccessException e) { + log.error("Failed to inject property: {} - {}", field.getName(), key, e); + throw new RuntimeException(e); + } + } + } + + return property; + } + + + private static Object convertValue(Class type, String rawValue) { + if (rawValue == null) return null; + if (StringUtils.isEmpty(rawValue)) return ""; + + if (type == String.class) return rawValue; + if (type == Integer.class || type == int.class) return Integer.valueOf(rawValue); + if (type == Long.class || type == long.class) return Long.valueOf(rawValue); + if (type == Double.class || type == double.class) return Double.valueOf(rawValue); + if (type == Boolean.class || type == boolean.class) return Boolean.valueOf(rawValue); + if (type == Float.class || type == float.class) return Float.valueOf(rawValue); + if (type == Short.class || type == short.class) return Short.valueOf(rawValue); + if (type == Byte.class || type == byte.class) return Byte.valueOf(rawValue); + + return rawValue; + } +} From 8ad147ed0b963c70dd40d14cca066c9edd3edafa Mon Sep 17 00:00:00 2001 From: Rinjae Date: Mon, 10 Nov 2025 17:29:39 +0900 Subject: [PATCH 10/10] =?UTF-8?q?weblogic=20https=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/rms/common/filter/CrossScriptingFilter.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java b/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java index 8d5da1e..c01f2cb 100644 --- a/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java +++ b/src/main/java/com/eactive/eai/rms/common/filter/CrossScriptingFilter.java @@ -37,11 +37,9 @@ public class CrossScriptingFilter implements Filter { String uri = request.getRequestURL().toString(); String servletPath = request.getServletPath(); String baseUrl = uri.replace(servletPath, ""); - boolean isValidUrl = returnUrl.startsWith(baseUrl); - System.out.println("checkReturnUrl => "+ uri + " : "+ servletPath); - System.out.println("checkReturnUrl => "+ baseUrl + " : "+ returnUrl); - System.out.println("checkReturnUrl => "+ returnUrl + " : "+ isValidUrl); - return isValidUrl; + // 25.11.10 - weblogic https://host:443/ 문제 대응 + baseUrl = baseUrl.replace(":443", ""); + return returnUrl.startsWith(baseUrl); } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) @@ -52,7 +50,6 @@ public class CrossScriptingFilter implements Filter { String returnUrl = (String)request.getParameter("returnUrl"); if(returnUrl != null) { if(!checkReturnUrl(request, returnUrl)) { - System.out.println("[CrossScriptingFilter] bad request. - " + returnUrl); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "bad request. - "+returnUrl); return; }