diff --git a/src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java b/src/main/java/com/xit/core/config/support/EgovYmlProperties.java similarity index 66% rename from src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java rename to src/main/java/com/xit/core/config/support/EgovYmlProperties.java index 9e9139e..7bd838d 100644 --- a/src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java +++ b/src/main/java/com/xit/core/config/support/EgovYmlProperties.java @@ -1,14 +1,12 @@ -package egovframework.com.cmm.service; +package com.xit.core.config.support; -import lombok.extern.slf4j.Slf4j; -import org.yaml.snakeyaml.Yaml; +import java.io.*; +import java.util.*; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import org.yaml.snakeyaml.*; + +import egovframework.com.cmm.service.*; +import lombok.extern.slf4j.*; @Slf4j public class EgovYmlProperties { @@ -28,8 +26,8 @@ public class EgovYmlProperties { * @return String */ public static String getProperty(String keyName) { - try (InputStream baseInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); - InputStream profileInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { + try (InputStream baseInputStream = EgovYmlProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); + InputStream profileInputStream = EgovYmlProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { Yaml yaml = new Yaml(); @@ -39,7 +37,7 @@ public class EgovYmlProperties { // 프로파일별 YAML 읽기 (override) if (profileInputStream != null) { Map profileMap = yaml.load(profileInputStream); - yamlMap.putAll(profileMap); + yamlMap = mergeYamlMaps(yamlMap, profileMap); } return getValueFromYamlMap(yamlMap, keyName); @@ -76,18 +74,18 @@ public class EgovYmlProperties { public static List> loadYamlFile() { List> keyList = new ArrayList<>(); - try (InputStream baseInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); - InputStream profileInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { + try (InputStream baseInputStream = EgovYmlProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); + InputStream profileInputStream = EgovYmlProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { Yaml yaml = new Yaml(); // 기본 YAML 읽기 Map yamlMap = baseInputStream != null ? yaml.load(baseInputStream) : new HashMap<>(); - + // 프로파일별 YAML 읽기 (override) if (profileInputStream != null) { Map profileMap = yaml.load(profileInputStream); - yamlMap.putAll(profileMap); + yamlMap = mergeYamlMaps(yamlMap, profileMap); } flattenYamlMap(yamlMap, "", keyList); @@ -98,6 +96,33 @@ public class EgovYmlProperties { return keyList; } + /** + * 두 개의 YAML 맵을 병합한다. 중첩된 구조를 올바르게 처리하며, profileMap의 값으로 override한다. + * @param baseMap 기본 YAML 맵 + * @param profileMap 프로파일 YAML 맵 + * @return 병합된 맵 + */ + @SuppressWarnings("unchecked") + private static Map mergeYamlMaps(Map baseMap, Map profileMap) { + if (baseMap == null) return profileMap; + if (profileMap == null) return baseMap; + + for (Map.Entry entry : profileMap.entrySet()) { + String key = entry.getKey(); + Object profileValue = entry.getValue(); + + if (baseMap.containsKey(key) && baseMap.get(key) instanceof Map && profileValue instanceof Map) { + // 중첩된 Map 병합 + baseMap.put(key, mergeYamlMaps((Map) baseMap.get(key), (Map) profileValue)); + } else { + // 기본값 덮어쓰기 + baseMap.put(key, profileValue); + } + } + + return baseMap; + } + /** * 중첩된 YAML 구조를 평탄화하여 key-value 리스트에 추가한다. * @param yamlMap Map diff --git a/src/main/java/egovframework/com/cmm/service/EgovProperties.java b/src/main/java/egovframework/com/cmm/service/EgovProperties.java index 08ecbf8..a4af96c 100644 --- a/src/main/java/egovframework/com/cmm/service/EgovProperties.java +++ b/src/main/java/egovframework/com/cmm/service/EgovProperties.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; +import com.xit.core.config.support.EgovYmlProperties; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; @@ -18,13 +18,12 @@ import org.springframework.core.io.support.ResourcePatternUtils; import egovframework.com.cmm.EgovWebUtil; import lombok.extern.slf4j.Slf4j; -//import java.io.FileNotFoundException; -//import java.io.IOException; -//import java.util.Properties; /** + *
  *  Class Name : EgovProperties.java
  *  Description : properties값들을 파일로부터 읽어와   Globals클래스의 정적변수로 로드시켜주는 클래스로
  *   문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다.
+ * @deprecated  4.3 xit-egov 적용시 yaml 및 spring.profiles.active 적용을 위해 {@link EgovYmlProperties} 사용
  *  Modification Information
  *
  *     수정일         수정자                   수정내용
@@ -37,9 +36,10 @@ import lombok.extern.slf4j.Slf4j;
  *  @since 2009. 01. 19
  *  @version 1.0
  *  @see
- *
+ * 
*/ +@Deprecated @Slf4j public class EgovProperties { diff --git a/src/main/java/egovframework/com/cmm/service/Globals.java b/src/main/java/egovframework/com/cmm/service/Globals.java index 4292403..09d0275 100644 --- a/src/main/java/egovframework/com/cmm/service/Globals.java +++ b/src/main/java/egovframework/com/cmm/service/Globals.java @@ -18,7 +18,7 @@ package egovframework.com.cmm.service; public class Globals { //Client정보 프로퍼티 위치 - //public static final String CLIENT_CONF_PATH = EgovProperties.getPathProperty("Globals.ClientConfPath"); + //public static final String CLIENT_CONF_PATH = EgovYmlProperties.getProperty("Globals.ClientConfPath"); //파일 업로드 원 파일명 public static final String ORIGIN_FILE_NM = "originalFileName"; diff --git a/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java index ae124af..34d9c55 100644 --- a/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java +++ b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java @@ -21,6 +21,8 @@ import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import com.xit.core.config.support.*; + import egovframework.com.cmm.EgovWebUtil; import egovframework.com.cmm.service.EgovFileMngService; import egovframework.com.cmm.service.EgovProperties; @@ -65,7 +67,7 @@ public class EgovFileDownloadController { @Resource(name="egovARIACryptoService") EgovCryptoService cryptoService; - public static final String ALGORITM_KEY = EgovProperties.getProperty("Globals.crypto.algoritm"); + public static final String ALGORITM_KEY = EgovYmlProperties.getProperty("Globals.crypto.algoritm"); /** * 브라우저 구분 얻기. diff --git a/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java index 4fdacab..ae1a884 100644 --- a/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java +++ b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java @@ -31,6 +31,8 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartResolver; +import com.xit.core.config.support.*; + import egovframework.com.cmm.service.EgovProperties; import egovframework.let.utl.fcc.service.EgovFileUploadUtil; import lombok.extern.slf4j.Slf4j; @@ -79,7 +81,7 @@ public class EgovMultipartResolver extends CommonsMultipartResolver { // 스프링 3.0변경으로 수정한 부분 MultiValueMap multipartFiles = new LinkedMultiValueMap(); Map multipartParameters = new HashMap(); - String whiteListFileUploadExtensions = EgovProperties.getProperty("Globals.fileUpload.Extensions"); + String whiteListFileUploadExtensions = EgovYmlProperties.getProperty("Globals.fileUpload.Extensions"); Map mpParamContentTypes = new HashMap(); // Extract multipart files and multipart parameters. diff --git a/src/main/java/egovframework/com/config/EgovWebServletContextListener.java b/src/main/java/egovframework/com/config/EgovWebServletContextListener.java index 52f9f0e..a11d527 100644 --- a/src/main/java/egovframework/com/config/EgovWebServletContextListener.java +++ b/src/main/java/egovframework/com/config/EgovWebServletContextListener.java @@ -3,6 +3,8 @@ package egovframework.com.config; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import com.xit.core.config.support.*; + import egovframework.com.cmm.service.EgovProperties; import lombok.extern.slf4j.Slf4j; @@ -31,7 +33,7 @@ public class EgovWebServletContextListener implements ServletContextListener { try { log.debug("===========================Start EgovServletContextLoad START ==========="); System.setProperty("spring.profiles.active", - EgovProperties.getProperty("Globals.DbType") + "," + EgovProperties.getProperty("Globals.Auth")); + EgovYmlProperties.getProperty("Globals.DbType") + "," + EgovYmlProperties.getProperty("Globals.Auth")); log.debug("Setting spring.profiles.active>" + System.getProperty("spring.profiles.active")); log.debug("===========================END EgovServletContextLoad END ==========="); } catch (IllegalArgumentException e) { diff --git a/src/main/java/egovframework/com/jwt/EgovJwtTokenUtil.java b/src/main/java/egovframework/com/jwt/EgovJwtTokenUtil.java index 358ccc0..749067d 100644 --- a/src/main/java/egovframework/com/jwt/EgovJwtTokenUtil.java +++ b/src/main/java/egovframework/com/jwt/EgovJwtTokenUtil.java @@ -7,6 +7,8 @@ import java.util.Map; import org.springframework.stereotype.Component; +import com.xit.core.config.support.*; + import egovframework.com.cmm.LoginVO; import egovframework.com.cmm.service.EgovProperties; import io.jsonwebtoken.Claims; @@ -23,7 +25,7 @@ public class EgovJwtTokenUtil implements Serializable{ //public static final long JWT_TOKEN_VALIDITY = 24 * 60 * 60; //하루 public static final long JWT_TOKEN_VALIDITY = (long) ((1 * 60 * 60) / 60) * 60; //토큰의 유효시간 설정, 기본 60분 - public static final String SECRET_KEY = EgovProperties.getProperty("Globals.jwt.secret"); + public static final String SECRET_KEY = EgovYmlProperties.getProperty("Globals.jwt.secret"); //retrieve username from jwt token public String getUserIdFromToken(String token) { diff --git a/src/main/java/egovframework/com/sns/SnsLoginApiController.java b/src/main/java/egovframework/com/sns/SnsLoginApiController.java index 60e5e24..3feed00 100644 --- a/src/main/java/egovframework/com/sns/SnsLoginApiController.java +++ b/src/main/java/egovframework/com/sns/SnsLoginApiController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.ObjectMapper; +import com.xit.core.config.support.*; import egovframework.com.cmm.EgovMessageSource; import egovframework.com.cmm.LoginVO; @@ -63,11 +64,11 @@ public class SnsLoginApiController { @Resource(name = "egovJwtTokenUtil") private EgovJwtTokenUtil jwtTokenUtil; /** SNS */ - public static final String NAVER_CLIENT_ID = EgovProperties.getProperty("Sns.naver.clientId"); - public static final String NAVER_CLIENT_SECRET = EgovProperties.getProperty("Sns.naver.clientSecret"); - public static final String NAVER_CALLBACK_URL = EgovProperties.getProperty("Sns.naver.callbackUrl"); - public static final String KAKAO_CLIENT_ID = EgovProperties.getProperty("Sns.kakao.clientId"); - public static final String KAKAO_CALLBACK_URL = EgovProperties.getProperty("Sns.kakao.callbackUrl"); + public static final String NAVER_CLIENT_ID = EgovYmlProperties.getProperty("Sns.naver.clientId"); + public static final String NAVER_CLIENT_SECRET = EgovYmlProperties.getProperty("Sns.naver.clientSecret"); + public static final String NAVER_CALLBACK_URL = EgovYmlProperties.getProperty("Sns.naver.callbackUrl"); + public static final String KAKAO_CLIENT_ID = EgovYmlProperties.getProperty("Sns.kakao.clientId"); + public static final String KAKAO_CALLBACK_URL = EgovYmlProperties.getProperty("Sns.kakao.callbackUrl"); /** * 카카오API 로그인 diff --git a/src/main/java/egovframework/let/uat/uia/web/EgovLoginController.java b/src/main/java/egovframework/let/uat/uia/web/EgovLoginController.java index f4e91f7..b9a6b58 100644 --- a/src/main/java/egovframework/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/egovframework/let/uat/uia/web/EgovLoginController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.*; import com.xit.*; +import com.xit.core.config.support.*; import egovframework.com.cmm.*; import egovframework.com.cmm.config.*; @@ -130,9 +131,8 @@ public class EgovLoginController { */ // 2021.05.30, 정진오, 디지털원패스 처리하기 위해 로그인 화면에 인증방식 전달 - String authType = EgovProperties.getProperty("Globals.Auth").trim(); + String authType = EgovYmlProperties.getProperty("Globals.Auth").trim(); model.addAttribute("authType", authType); - String message = (String)request.getParameter("loginMessage"); if (message!=null) model.addAttribute("loginMessage", message); diff --git a/src/main/java/egovframework/let/utl/sim/service/EgovClntInfo.java b/src/main/java/egovframework/let/utl/sim/service/EgovClntInfo.java index b2fa7d5..2c4eeca 100644 --- a/src/main/java/egovframework/let/utl/sim/service/EgovClntInfo.java +++ b/src/main/java/egovframework/let/utl/sim/service/EgovClntInfo.java @@ -20,6 +20,8 @@ import javax.servlet.http.*; import org.springframework.web.context.request.*; +import com.xit.core.config.support.*; + import egovframework.com.cmm.service.*; public class EgovClntInfo { @@ -76,8 +78,8 @@ public class EgovClntInfo { String user_agent = request.getHeader("user-agent"); String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0]; - //String os_conf = EgovProperties.getProperty(Globals.CLIENT_CONF_PATH, os_info.replaceAll(" ", "")); - String os_conf = EgovProperties.getProperty("Globals.CLIENT_CONF_PATH"); + //String os_conf = EgovYmlProperties.getProperty(Globals.CLIENT_CONF_PATH, os_info.replaceAll(" ", "")); + String os_conf = EgovYmlProperties.getProperty("Globals.CLIENT_CONF_PATH"); String osInfo = ""; if (os_conf != null && !"".equals(os_conf)) { osInfo = os_conf;