From 545b49daf718f2608db6e2e22e69566df60180c3 Mon Sep 17 00:00:00 2001 From: infraurp Date: Tue, 11 Aug 2026 08:50:04 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=9C=EC=9D=B8=EC=A0=95=EB=B3=B4=EB=B3=B4?= =?UTF-8?q?=ED=98=B8=20=EA=B8=B0=EB=8A=A5=EA=B0=9C=EC=84=A0=204=EC=B0=A8?= =?UTF-8?q?=20=E2=80=94=20=ED=9A=8C=EC=9B=90=EC=A0=95=EB=B3=B4=20=EC=95=94?= =?UTF-8?q?=ED=98=B8=ED=99=94=20=EC=9D=BD=EA=B8=B0=EC=A0=84=ED=99=98/?= =?UTF-8?q?=EA=B2=80=EC=83=89=EC=A0=84=ED=99=98=20=EC=99=84=EB=A3=8C(?= =?UTF-8?q?=EB=B7=B0=20=EC=9E=AC=EC=A0=95=EC=9D=98=20=EB=8C=80=EB=B9=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 일반회원 이름(COMTNGNRLMBER.MBER_NM) 암호화 저장(추가제안 Action4)의 마지막 단계로, comvnusermaster/comvnuserinfo 뷰를 거쳐 이름을 표시·검색하는 전체 소비자(66개 표시 구문 + 신규 발견된 검색(LIKE/exact-match) 구문)를 뷰 재정의 이전에 전수 정비했다. - 표시: 판별 컬럼(USER_SE 등) 추가 후 GNR일 때만 조건부 복호화 - 검색: LIKE/exact-match를 (HASH = #hash# OR 원본 조건) 패턴으로 전환 - 과정에서 발견한 기존 버그(EgovBBSLoneMaster/EgovBoard의 columnIndex 위치 불일치, BizPrvol/EgovLoginUsr/BizPrapp의 누락된 검색 전환 지점)를 최소 범위로 수정하거나(내 필드에 한해) 영향받지 않도록 우회 처리 뷰 자체(ALTER VIEW)는 아직 미실행 — 모든 소비자 정비가 끝나야 실행 가능한 all-or-nothing 게이트가 있어 별도로 진행한다. Co-Authored-By: Claude Sonnet 5 --- .../egovframework/com/cmm/ComDefaultVO.java | 15 +++ .../java/egovframework/com/cmm/LoginVO.java | 15 +++ .../crypto/MemberNmDecryptSupport.java | 105 +++++++++++++++ .../cmm/privacy/lock/LoginFailHistoryDAO.java | 13 +- .../com/cntc/service/impl/CntcDAO.java | 40 +++++- .../com/cop/bbs/service/BoardMasterVO.java | 16 ++- .../com/cop/bbs/service/BoardUseInfVO.java | 24 ++++ .../com/cop/bbs/service/BoardVO.java | 11 ++ .../com/cop/bbs/service/Satisfaction.java | 13 ++ .../com/cop/bbs/service/Scrap.java | 13 ++ .../bbs/service/impl/BBSAddedOptionsDAO.java | 8 +- .../bbs/service/impl/BBSLoneMasterDAO.java | 4 + .../cop/bbs/service/impl/BBSManageDAO.java | 58 +++++++- .../bbs/service/impl/BBSUseInfoManageDAO.java | 31 ++++- .../cop/cmt/service/impl/BBSCommentDAO.java | 21 ++- .../com/cop/com/service/UserInfVO.java | 24 ++++ .../service/impl/EgovUserInfManageDAO.java | 82 +++++++++--- .../com/cop/scp/service/impl/BBSScrapDAO.java | 15 ++- .../com/cop/sms/service/Sms.java | 13 ++ .../com/cop/sms/service/impl/SmsDAO.java | 7 +- .../stf/service/impl/BBSSatisfactionDAO.java | 15 ++- .../com/cop/tpl/service/TemplateInfVO.java | 13 ++ .../tpl/service/impl/TemplateManageDAO.java | 8 +- .../sec/rgm/service/impl/AuthorGroupDAO.java | 44 +++++- .../com/sym/log/clg/service/LoginLog.java | 15 ++- .../sym/log/clg/service/impl/LoginLogDAO.java | 24 +++- .../com/sym/log/lgm/service/SysLog.java | 13 ++ .../sym/log/lgm/service/impl/SysLogDAO.java | 24 +++- .../com/sym/log/ulg/service/UserLog.java | 24 ++++ .../sym/log/ulg/service/impl/UserLogDAO.java | 59 ++++++-- .../com/sym/log/wlg/service/WebLog.java | 13 ++ .../sym/log/wlg/service/impl/WebLogDAO.java | 24 +++- .../uat/uap/service/impl/LoginPolicyDAO.java | 40 +++++- .../com/uat/uia/service/impl/LoginDAO.java | 102 ++++++++++++-- .../service/impl/QustnrRespondInfoDao.java | 45 ++++++- .../service/impl/QustnrRespondManageDao.java | 12 +- .../umt/service/impl/DiapauseManageDAO.java | 55 +++++++- .../uss/umt/service/impl/MberManageDAO.java | 9 +- .../biz/note/service/impl/BizMemberDAO.java | 35 ++++- .../frt/biz/note/service/impl/BizNoteDAO.java | 8 +- .../biz/appconfirm/service/AppconfirmVO.java | 41 ++++++ .../service/impl/BizAppconfirmDAO.java | 72 +++++++++- .../arko/mnt/biz/event/service/EvtMntVO.java | 14 ++ .../event/service/impl/BizAwardMntDAO.java | 27 +++- .../mnt/biz/group/service/GroupManageVO.java | 13 ++ .../group/service/impl/GroupManageDAO.java | 43 +++++- .../arko/mnt/biz/prbro/service/PrbroVO.java | 13 ++ .../biz/prbro/service/impl/BizPrbroDAO.java | 41 +++++- .../arko/mnt/biz/prmvp/service/PrmvpVO.java | 13 ++ .../biz/prmvp/service/impl/BizPrmvpDAO.java | 41 +++++- .../arko/mnt/biz/proapp/service/ProappVO.java | 25 ++++ .../biz/proapp/service/impl/BizProappDAO.java | 117 ++++++++++++---- .../biz/provol/service/impl/BizProvolDAO.java | 93 +++++++++++-- .../arko/mnt/biz/sample/service/SampleVO.java | 13 ++ .../biz/sample/service/impl/BizSampleDAO.java | 42 +++++- .../stat/service/ApprovalStatSummaryVO.java | 26 ++++ .../mnt/biz/stat/service/StatSummaryVO.java | 15 ++- .../mnt/biz/stat/service/impl/BizStatDAO.java | 33 ++++- .../service/impl/TalentMberManageDAO.java | 78 +++++++++-- .../or/arko/mnt/biz/test/service/TestVO.java | 15 ++- .../mnt/biz/test/service/impl/BizTestDAO.java | 42 +++++- .../cop/bbs/EgovBBSAddedOptions_SQL_Mysql.xml | 11 +- .../cop/bbs/EgovBBSLoneMaster_SQL_Mysql.xml | 3 +- .../com/cop/bbs/EgovBBSUse_SQL_Mysql.xml | 17 +-- .../com/cop/bbs/EgovBoard_SQL_Mysql.xml | 24 ++-- .../com/cop/cmt/EgovBBSComment_SQL_Mysql.xml | 14 +- .../com/cop/com/EgovUserInf_SQL_Mysql.xml | 38 +++--- .../com/cop/scp/EgovBBSScrap_SQL_Mysql.xml | 8 +- .../sqlmap/com/cop/sms/EgovSms_SQL_Mysql.xml | 3 +- .../cop/stf/EgovBBSSatisfaction_SQL_Mysql.xml | 8 +- .../com/cop/tpl/EgovTemplate_SQL_Mysql.xml | 3 +- .../com/sec/rgm/EgovAuthorGroup_SQL_Mysql.xml | 20 +-- .../sec/rgm/EgovAuthorGroup_SQL_Oracle.xml | 22 +-- .../com/sts/dst/EgovDtaUseStats_SQL_Mysql.xml | 4 +- .../sym/log/clg/EgovLoginLog_SQL_Mysql.xml | 7 +- .../com/sym/log/lgm/EgovSysLog_SQL_Mysql.xml | 3 + .../com/sym/log/ulg/EgovUserLog_SQL_Mysql.xml | 11 +- .../com/sym/log/wlg/EgovWebLog_SQL_Mysql.xml | 7 +- .../com/uat/uap/EgovLoginPolicy_SQL_Mysql.xml | 6 +- .../com/uat/uia/EgovLoginUsr_SQL_Mysql.xml | 18 +-- .../com/uat/uia/EgovLoginUsr_SQL_Oracle.xml | 12 +- .../qri/EgovQustnrRespondInfo_SQL_Mysql.xml | 17 ++- .../qri/EgovQustnrRespondInfo_SQL_Oracle.xml | 10 +- .../qrm/EgovQustnrRespondManage_SQL_Mysql.xml | 1 + .../com/uss/umt/EgovDiapauseManage_Mysql.xml | 12 +- .../uss/umt/EgovDiapauseManage_SQL_Oracle.xml | 6 +- .../com/uss/umt/EgovMberManage_SQL_Mysql.xml | 8 +- .../com/uss/umt/EgovMberManage_SQL_Oracle.xml | 4 +- .../site/frt/biz/note/BizMember_SQL_Mysql.xml | 2 +- .../site/frt/biz/note/BizNote_SQL_Mysql.xml | 12 +- .../site/frt/biz/note/BizNote_SQL_Oracle.xml | 11 +- .../appconfirm/BizAppconfirm_SQL_Mysql.xml | 50 +++++-- .../site/mnt/biz/cntc/Cntc_SQL_Mysql.xml | 14 +- .../site/mnt/biz/cntc/Cntc_SQL_Oracle.xml | 10 +- .../mnt/biz/event/BizAwardMnt_SQL_Mysql.xml | 20 +-- .../site/mnt/biz/group/BizGroup_SQL_Mysql.xml | 6 +- .../mnt/biz/group/BizGroup_SQL_Oracle.xml | 2 +- .../site/mnt/biz/prbro/BizPrbro_SQL_Mysql.xml | 7 +- .../PrivacyLoginFailHistory_SQL_Mysql.xml | 2 +- .../PrivacyLoginFailHistory_SQL_Oracle.xml | 2 +- .../site/mnt/biz/prmvp/BizPrmvp_SQL_Mysql.xml | 7 +- .../mnt/biz/proapp/BizPrapp_SQL_Mysql.xml | 43 +++++- .../mnt/biz/proapp/BizPrapp_SQL_Oracle.xml | 4 +- .../mnt/biz/provol/BizPrvol_SQL_Mysql.xml | 126 +++++++++--------- .../mnt/biz/sample/BizSample_SQL_Mysql.xml | 11 +- .../site/mnt/biz/stat/BizStat_SQL_Mysql.xml | 3 + .../mnt/biz/talent/BizTalent_SQL_Mysql.xml | 48 +++---- .../site/mnt/biz/test/BizTest_SQL_Mysql.xml | 13 +- ...acy.mber_nm_dead_views_backup_20260810.sql | 30 +++++ .../privacy.mber_nm_dead_views_drop_mysql.sql | 49 +++++++ 110 files changed, 2246 insertions(+), 450 deletions(-) create mode 100644 src/main/java/egovframework/com/cmm/privacy/crypto/MemberNmDecryptSupport.java create mode 100644 src/script/mysql/backup/privacy.mber_nm_dead_views_backup_20260810.sql create mode 100644 src/script/mysql/ddl/privacy.mber_nm_dead_views_drop_mysql.sql diff --git a/src/main/java/egovframework/com/cmm/ComDefaultVO.java b/src/main/java/egovframework/com/cmm/ComDefaultVO.java index 4480212..cbebf80 100644 --- a/src/main/java/egovframework/com/cmm/ComDefaultVO.java +++ b/src/main/java/egovframework/com/cmm/ComDefaultVO.java @@ -105,6 +105,21 @@ public class ComDefaultVO implements Serializable { this.searchKeyword = searchKeyword; } + /** + * 이름 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * 회원 이름이 암호화되며 부분검색(LIKE)이 불가능해져, 이름 검색을 수행하는 DAO가 + * {@code searchKeyword}로부터 채운다. 화면·서비스는 이 필드를 직접 설정하지 않는다. + */ + private String searchKeywordHash = ""; + + public String getSearchKeywordHash() { + return searchKeywordHash; + } + + public void setSearchKeywordHash(String searchKeywordHash) { + this.searchKeywordHash = searchKeywordHash; + } + public String getSearchUseYn() { return searchUseYn; } diff --git a/src/main/java/egovframework/com/cmm/LoginVO.java b/src/main/java/egovframework/com/cmm/LoginVO.java index 2251a6c..a57d475 100644 --- a/src/main/java/egovframework/com/cmm/LoginVO.java +++ b/src/main/java/egovframework/com/cmm/LoginVO.java @@ -161,6 +161,21 @@ public class LoginVO implements Serializable{ public void setName(String name) { this.name = name; } + + /** + * 이름(아이디/비밀번호 찾기) 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * 일반회원 이름이 암호화되며 {@code searchId}/{@code searchPassword} 조회의 이름 조건이 + * 완전일치 해시로 바뀌었다. {@code LoginDAO}가 {@code name}으로부터 채운다. + */ + private String nameHash; + + public String getNameHash() { + return nameHash; + } + + public void setNameHash(String nameHash) { + this.nameHash = nameHash; + } /** * ihidNum attribute 를 리턴한다. * @return String diff --git a/src/main/java/egovframework/com/cmm/privacy/crypto/MemberNmDecryptSupport.java b/src/main/java/egovframework/com/cmm/privacy/crypto/MemberNmDecryptSupport.java new file mode 100644 index 0000000..0e8aed9 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/privacy/crypto/MemberNmDecryptSupport.java @@ -0,0 +1,105 @@ +/** + * Class Name : MemberNmDecryptSupport.java + * Description : 회원 이름 읽기 전환(복호화) 공용 헬퍼 — 개인정보보호 기능개선 사업(추가제안 Action4) + * + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2026.08.10 개인정보보호 최초 생성 — SELECT MBER_NM 을 MBER_NM_ENC 로 전환하는 DAO들이 공유 + * + * @since 2026. 08. 10 + * @version 1.0 + */ +package egovframework.com.cmm.privacy.crypto; + +import java.util.List; +import java.util.Map; + +import org.apache.commons.beanutils.PropertyUtils; + +/** + * 조회 결과에 담긴 이름 암호문을 평문으로 되돌려 기존 코드가 쓰던 키·필드 이름을 그대로 + * 채운다. arko의 조회 SQL은 대부분 {@code resultClass="egovMap"}(Map)이고 일부는 VO다 — + * 이 클래스가 두 형태를 모두 처리해 DAO마다 다른 복호화 코드를 두지 않게 한다. + * + *

사용 패턴: SQL의 {@code MBER_NM as "userNm"}을 {@code MBER_NM_ENC as "userNm"}으로 + * 바꾼 뒤(별칭은 그대로 유지), DAO 메서드가 결과를 반환하기 직전에 + * {@code MemberNmDecryptSupport.decryptListInPlace(rows, "userNm")}를 호출한다. + * 같은 키를 입력이자 출력으로 써서 호출부가 한 줄만 늘어나고, 화면·서비스 코드는 전혀 + * 건드리지 않는다 — 그 키에 이제 평문이 들어있다는 사실만 달라진다.

+ * + *

실패 처리: 복호화에 실패하면 예외를 던진다(평문 대체나 빈 값 대체를 하지 않는다). + * 개인정보 조회 화면이 복호화 실패를 숨기고 빈 이름을 보여주면, "왜 이름이 안 보이지"라는 + * 장애가 "키가 바뀌었다/암호문이 깨졌다"는 진짜 원인을 감춘다.

+ */ +public final class MemberNmDecryptSupport { + + private static volatile MemberDataCipher cipher; + + private MemberNmDecryptSupport() { + } + + private static MemberDataCipher cipher() { + MemberDataCipher c = cipher; + if (c == null) { + synchronized (MemberNmDecryptSupport.class) { + c = cipher; + if (c == null) { + c = new MemberDataCipher(); + cipher = c; + } + } + } + return c; + } + + /** + * 목록의 각 행에서 {@code key} 위치의 암호문을 복호화해 같은 키에 되돌려 쓴다. + * 행이 {@link Map}이면 {@code put}, 그 외(JavaBean VO)면 리플렉션 setter를 쓴다. + * + * @param rows 조회 결과(egovMap 목록 또는 VO 목록). null이면 아무 것도 하지 않는다. + * @param key 암호문이 들어있고 평문이 들어갈 속성/컬럼 키(예: "userNm", "mberNm") + */ + public static void decryptListInPlace(List rows, String key) { + if (rows == null || rows.isEmpty()) { + return; + } + for (int i = 0; i < rows.size(); i++) { + decryptInPlace(rows.get(i), key); + } + } + + /** 단건 조회({@code selectByPk} 반환값 등)용. row가 null이면 아무 것도 하지 않는다. */ + public static void decryptInPlace(Object row, String key) { + if (row == null) { + return; + } + try { + String enc; + if (row instanceof Map) { + Object v = ((Map) row).get(key); + enc = (v instanceof String) ? (String) v : null; + } else { + Object v = PropertyUtils.getProperty(row, key); + enc = (v instanceof String) ? (String) v : null; + } + if (enc == null || enc.length() == 0) { + // 탈퇴 등으로 이름이 파기된 행은 암호문도 없다 — 정상, 복호화할 것이 없다. + return; + } + String plain = cipher().decrypt(enc); + if (row instanceof Map) { + @SuppressWarnings("unchecked") + Map m = (Map) row; + m.put(key, plain); + } else { + PropertyUtils.setProperty(row, key, plain); + } + } catch (Exception e) { + throw new IllegalStateException( + "[개인정보/암호화] 이름 복호화 실패(key=" + key + ", rowType=" + + row.getClass().getName() + ")", e); + } + } +} diff --git a/src/main/java/egovframework/com/cmm/privacy/lock/LoginFailHistoryDAO.java b/src/main/java/egovframework/com/cmm/privacy/lock/LoginFailHistoryDAO.java index f89babb..1c00608 100644 --- a/src/main/java/egovframework/com/cmm/privacy/lock/LoginFailHistoryDAO.java +++ b/src/main/java/egovframework/com/cmm/privacy/lock/LoginFailHistoryDAO.java @@ -5,6 +5,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; /** @@ -30,7 +31,17 @@ public class LoginFailHistoryDAO extends EgovComAbstractDAO { /** 인증 실패 이력 목록(검색·페이징) */ @SuppressWarnings("unchecked") public List selectLoginFailHistoryList(LoginFailHistoryVO vo) { - return list("LoginFailHistoryDAO.selectLoginFailHistoryList", vo); + List result = list("LoginFailHistoryDAO.selectLoginFailHistoryList", vo); + // GNR(일반회원)만 userNm이 암호문이다 — USR(취급자)는 평문이다. + if (result != null) { + for (int i = 0; i < result.size(); i++) { + LoginFailHistoryVO row = result.get(i); + if (row != null && "GNR".equals(row.getGubun())) { + MemberNmDecryptSupport.decryptInPlace(row, "userNm"); + } + } + } + return result; } /** 인증 실패 이력 전체 건수(페이징) */ diff --git a/src/main/java/egovframework/com/cntc/service/impl/CntcDAO.java b/src/main/java/egovframework/com/cntc/service/impl/CntcDAO.java index 1aaf3a0..a899fac 100644 --- a/src/main/java/egovframework/com/cntc/service/impl/CntcDAO.java +++ b/src/main/java/egovframework/com/cntc/service/impl/CntcDAO.java @@ -6,6 +6,8 @@ import java.util.Map; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cntc.service.CntcListVO; import egovframework.com.cntc.service.CntcRecvVO; @@ -14,6 +16,26 @@ import egovframework.com.cntc.service.CntcSendVO; @Repository("CntcDAO") public class CntcDAO extends EgovComAbstractDAO{ + /** + * 이름 검색 완전일치 해시 계산(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * 지연 초기화 — {@link egovframework.com.cmm.privacy.crypto.MemberDataCipher} 정책과 동일. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(CntcListVO vo) { + if (vo == null || !"name".equals(vo.getSearchCondition()) && !"all".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + @SuppressWarnings("unchecked") public List selectSendData(){ return list("CntcDAO.selectSendData", ""); @@ -56,10 +78,14 @@ public class CntcDAO extends EgovComAbstractDAO{ } public List selectCntcList(CntcListVO clistvo){ - return list("CntcDAO.selectCntcList", clistvo); + fillSearchKeywordHash(clistvo); + List result = list("CntcDAO.selectCntcList", clistvo); + MemberNmDecryptSupport.decryptListInPlace(result, "mberNm"); + return result; } public int selectCntcListTotCnt(CntcListVO clistvo) { + fillSearchKeywordHash(clistvo); return (Integer)getSqlMapClientTemplate().queryForObject("CntcDAO.selectCntcListTotCnt", clistvo); } @@ -72,11 +98,19 @@ public class CntcDAO extends EgovComAbstractDAO{ } public Map selectInDataSendData(Map cntcMap) { - return (Map)getSqlMapClientTemplate().queryForObject("CntcDAO.selectInDataSendData", cntcMap); + Map result = (Map)getSqlMapClientTemplate().queryForObject("CntcDAO.selectInDataSendData", cntcMap); + if (result != null && "GNR".equals(result.get("data11_se"))) { + MemberNmDecryptSupport.decryptInPlace(result, "data11"); + } + return result; } public HashMap selectNewInDataSendData(HashMap param) { - return (HashMap)getSqlMapClientTemplate().queryForObject("CntcDAO.selectNewInDataSendData", param); + HashMap result = (HashMap)getSqlMapClientTemplate().queryForObject("CntcDAO.selectNewInDataSendData", param); + if (result != null && "GNR".equals(result.get("user_nm_se"))) { + MemberNmDecryptSupport.decryptInPlace(result, "user_nm"); + } + return result; } public void insertNewSendList(HashMap param) { diff --git a/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java b/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java index 3821e65..ce9c0e7 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java @@ -37,7 +37,21 @@ public class BoardMasterVO extends BoardMaster implements Serializable { /** 정렬순서(DESC,ASC) */ private String sortOrdr = ""; - + + /** + * 최초 등록자 유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * GNR(일반회원)일 때만 {@code frstRegisterNm}이 암호문이다 — 조건부 복호화 판별용. + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** 검색사용여부 */ private String searchUseYn = ""; diff --git a/src/main/java/egovframework/com/cop/bbs/service/BoardUseInfVO.java b/src/main/java/egovframework/com/cop/bbs/service/BoardUseInfVO.java index e04b9e6..4db07cf 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/BoardUseInfVO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/BoardUseInfVO.java @@ -514,6 +514,30 @@ public class BoardUseInfVO extends BoardUseInf implements Serializable { this.userNm = userNm; } + /** + * userNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + + /** 이름 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). */ + private String searchKeywordHash = ""; + + public String getSearchKeywordHash() { + return searchKeywordHash; + } + + public void setSearchKeywordHash(String searchKeywordHash) { + this.searchKeywordHash = searchKeywordHash; + } + /** * provdUrl attribute를 리턴한다. * diff --git a/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java b/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java index 6a0d49f..93f7563 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java @@ -253,6 +253,17 @@ public class BoardVO extends Board implements Serializable { this.searchWrd = searchWrd; } + /** 이름 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). */ + private String searchKeywordHash = ""; + + public String getSearchKeywordHash() { + return searchKeywordHash; + } + + public void setSearchKeywordHash(String searchKeywordHash) { + this.searchKeywordHash = searchKeywordHash; + } + /** * sortOrdr attribute를 리턴한다. * diff --git a/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java b/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java index 0c7d1ba..64f6476 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java +++ b/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java @@ -243,6 +243,19 @@ public class Satisfaction implements Serializable { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** * frstRegisterPnttm attribute를 리턴한다. * @return the frstRegisterPnttm diff --git a/src/main/java/egovframework/com/cop/bbs/service/Scrap.java b/src/main/java/egovframework/com/cop/bbs/service/Scrap.java index 6cf9fda..f227c8c 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/Scrap.java +++ b/src/main/java/egovframework/com/cop/bbs/service/Scrap.java @@ -167,6 +167,19 @@ public class Scrap implements Serializable { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** * frstRegisterPnttm attribute를 리턴한다. * @return the frstRegisterPnttm diff --git a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java index f781ac9..ac222b9 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java @@ -2,6 +2,7 @@ package egovframework.com.cop.bbs.service.impl; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.BoardMaster; import egovframework.com.cop.bbs.service.BoardMasterVO; @@ -40,7 +41,12 @@ public class BBSAddedOptionsDAO extends EgovComAbstractDAO { * @param BoardMasterVO */ public BoardMasterVO selectAddedOptionsInf(BoardMaster vo) throws Exception { - return (BoardMasterVO)selectByPk("BBSAddedOptionsDAO.selectAddedOptionsInf", vo); + BoardMasterVO result = (BoardMasterVO)selectByPk("BBSAddedOptionsDAO.selectAddedOptionsInf", vo); + // GNR(일반회원)만 frstRegisterNm이 암호문이다. + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSLoneMasterDAO.java b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSLoneMasterDAO.java index 3c2577c..02d1d03 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSLoneMasterDAO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSLoneMasterDAO.java @@ -51,6 +51,10 @@ public class BBSLoneMasterDAO extends EgovComAbstractDAO { * @param BoardMasterVO */ public BoardMasterVO selectMaster(BoardMaster vo) throws Exception { + // 주의(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10): boardMasterDetail resultMap의 + // columnIndex가 이 SQL의 실제 SELECT 컬럼 순서와 기존부터 어긋나 있어(frstRegisterNm이 실제로는 + // ATCH_POSBL_FILE_NUMBER 값을 읽음) 여기서 복호화를 걸면 GNR 행에서 암호문이 아닌 값을 복호화 + // 시도해 예외가 난다. 이 매핑 자체는 이번 작업 범위 밖의 기존 버그이므로 복호화를 걸지 않는다. return (BoardMasterVO)selectByPk("BBSLoneMasterDAO.selectMaster", vo); } diff --git a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSManageDAO.java b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSManageDAO.java index d4ff3de..ed0e9df 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSManageDAO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSManageDAO.java @@ -7,6 +7,8 @@ import kr.or.arko.mnt.biz.data.service.DataVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.Board; import egovframework.com.cop.bbs.service.BoardVO; @@ -30,6 +32,31 @@ import egovframework.com.cop.bbs.service.BoardVO; @Repository("BBSManageDAO") public class BBSManageDAO extends EgovComAbstractDAO { + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. searchCnd='2'일 때만 이름검색이다. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(BoardVO vo) { + if (vo == null || !"2".equals(vo.getSearchCnd())) { + return; + } + String kw = vo.getSearchWrd(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptFrstRegisterNmIfGnr(BoardVO vo) { + if (vo != null && "GNR".equals(vo.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "frstRegisterNm"); + } + } + /** * 게시판에 게시물을 등록 한다. * @@ -78,7 +105,9 @@ public class BBSManageDAO extends EgovComAbstractDAO { * @throws Exception */ public BoardVO selectBoardArticle(BoardVO boardVO) throws Exception { - return (BoardVO)selectByPk("BBSManageDAO.selectBoardArticle", boardVO); + BoardVO result = (BoardVO)selectByPk("BBSManageDAO.selectBoardArticle", boardVO); + decryptFrstRegisterNmIfGnr(result); + return result; } /** @@ -134,12 +163,22 @@ public class BBSManageDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectBoardArticleList(BoardVO boardVO) throws Exception { - return list("BBSManageDAO.selectBoardArticleList", boardVO); + fillSearchKeywordHash(boardVO); + List result = list("BBSManageDAO.selectBoardArticleList", boardVO); + for (BoardVO row : result) { + decryptFrstRegisterNmIfGnr(row); + } + return result; } @SuppressWarnings("unchecked") public List selectBoardArticleTopList(BoardVO boardVO) throws Exception { - return list("BBSManageDAO.selectBoardArticleTopList", boardVO); + fillSearchKeywordHash(boardVO); + List result = list("BBSManageDAO.selectBoardArticleTopList", boardVO); + for (BoardVO row : result) { + decryptFrstRegisterNmIfGnr(row); + } + return result; } /** @@ -198,6 +237,7 @@ public class BBSManageDAO extends EgovComAbstractDAO { * @throws Exception */ public int selectBoardArticleListCnt(BoardVO boardVO) throws Exception { + fillSearchKeywordHash(boardVO); return (Integer)getSqlMapClientTemplate().queryForObject("BBSManageDAO.selectBoardArticleListCnt", boardVO); } @@ -343,7 +383,11 @@ public class BBSManageDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectGuestList(BoardVO boardVO) throws Exception { - return list("BBSManageDAO.selectGuestList", boardVO); + List result = list("BBSManageDAO.selectGuestList", boardVO); + for (BoardVO row : result) { + decryptFrstRegisterNmIfGnr(row); + } + return result; } /** @@ -543,7 +587,11 @@ public class BBSManageDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectBoardReplyArticleList(BoardVO boardVO) throws Exception { - return list("BBSManageDAO.selectBoardReplyArticleList", boardVO); + List result = list("BBSManageDAO.selectBoardReplyArticleList", boardVO); + for (BoardVO row : result) { + decryptFrstRegisterNmIfGnr(row); + } + return result; } /** diff --git a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSUseInfoManageDAO.java b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSUseInfoManageDAO.java index c0b9317..ef3f1e5 100644 --- a/src/main/java/egovframework/com/cop/bbs/service/impl/BBSUseInfoManageDAO.java +++ b/src/main/java/egovframework/com/cop/bbs/service/impl/BBSUseInfoManageDAO.java @@ -4,6 +4,8 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.BoardUseInf; import egovframework.com.cop.bbs.service.BoardUseInfVO; @@ -28,6 +30,25 @@ import egovframework.com.cop.bbs.service.BoardUseInfVO; @Repository("BBSUseInfoManageDAO") public class BBSUseInfoManageDAO extends EgovComAbstractDAO { + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. searchCnd='0'일 때만 이름검색이다. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(BoardUseInfVO vo) { + if (vo == null || !"0".equals(vo.getSearchCnd())) { + return; + } + String kw = vo.getSearchWrd(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** * 게시판 사용 정보를 삭제한다. * @@ -110,7 +131,14 @@ public class BBSUseInfoManageDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectBBSUseInfsByTrget(BoardUseInfVO bdUseVO) throws Exception { - return list("BBSUseInfoManageDAO.selectBBSUseInfsByTrget", bdUseVO); + fillSearchKeywordHash(bdUseVO); + List result = list("BBSUseInfoManageDAO.selectBBSUseInfsByTrget", bdUseVO); + for (BoardUseInfVO row : result) { + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "userNm"); + } + } + return result; } /** @@ -121,6 +149,7 @@ public class BBSUseInfoManageDAO extends EgovComAbstractDAO { * @throws Exception */ public int selectBBSUseInfsCntByTrget(BoardUseInfVO bdUseVO) throws Exception { + fillSearchKeywordHash(bdUseVO); return (Integer)getSqlMapClientTemplate().queryForObject("BBSUseInfoManageDAO.selectBBSUseInfsCntByTrget", bdUseVO); } diff --git a/src/main/java/egovframework/com/cop/cmt/service/impl/BBSCommentDAO.java b/src/main/java/egovframework/com/cop/cmt/service/impl/BBSCommentDAO.java index 3c93488..1b51560 100644 --- a/src/main/java/egovframework/com/cop/cmt/service/impl/BBSCommentDAO.java +++ b/src/main/java/egovframework/com/cop/cmt/service/impl/BBSCommentDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.BoardVO; import egovframework.com.cop.bbs.service.Comment; @@ -28,6 +29,22 @@ import egovframework.com.cop.bbs.service.CommentVO; @Repository("BBSCommentDAO") public class BBSCommentDAO extends EgovComAbstractDAO { + /** + * GNR(일반회원)만 frstRegisterNm이 암호문이다(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * ENT/USR/GRO 는 각자 다른 테이블의 평문이므로 무조건 복호화하면 예외가 난다. + */ + private void decryptGnrRowsInPlace(List rows) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + CommentVO row = rows.get(i); + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "frstRegisterNm"); + } + } + } + /** * 댓글에 대한 목록을 조회 한다. * @@ -37,7 +54,9 @@ public class BBSCommentDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectCommentList(CommentVO commentVO) throws Exception { - return list("BBSCommentDAO.selectCommentList", commentVO); + List result = list("BBSCommentDAO.selectCommentList", commentVO); + decryptGnrRowsInPlace(result); + return result; } /** diff --git a/src/main/java/egovframework/com/cop/com/service/UserInfVO.java b/src/main/java/egovframework/com/cop/com/service/UserInfVO.java index ca09b98..46672c4 100644 --- a/src/main/java/egovframework/com/cop/com/service/UserInfVO.java +++ b/src/main/java/egovframework/com/cop/com/service/UserInfVO.java @@ -153,6 +153,30 @@ public class UserInfVO implements Serializable { this.userNm = userNm; } + /** + * userNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String userNmSe = ""; + + public String getUserNmSe() { + return userNmSe; + } + + public void setUserNmSe(String userNmSe) { + this.userNmSe = userNmSe; + } + + /** 이름 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). */ + private String searchKeywordHash = ""; + + public String getSearchKeywordHash() { + return searchKeywordHash; + } + + public void setSearchKeywordHash(String searchKeywordHash) { + this.searchKeywordHash = searchKeywordHash; + } + /** * userZip attribute를 리턴한다. * diff --git a/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java b/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java index 0764dab..dacd98a 100644 --- a/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java +++ b/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java @@ -4,6 +4,8 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.com.service.UserInfVO; @@ -26,118 +28,168 @@ import egovframework.com.cop.com.service.UserInfVO; @Repository("EgovUserInfManageDAO") public class EgovUserInfManageDAO extends EgovComAbstractDAO { + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(UserInfVO vo) { + if (vo == null || !"0".equals(vo.getSearchCnd())) { + return; + } + String kw = vo.getSearchWrd(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptListIfGnr(List rows) { + if (rows == null) { + return; + } + for (UserInfVO row : rows) { + if (row != null && "GNR".equals(row.getUserNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "userNm"); + } + } + } + /** * 사용자 정보에 대한 목록을 조회한다. - * + * * @param userVO * @return * @throws Exception */ @SuppressWarnings("unchecked") public List selectUserList(UserInfVO userVO) throws Exception { - return list("EgovUserInfManageDAO.selectUserList", userVO); + fillSearchKeywordHash(userVO); + List result = list("EgovUserInfManageDAO.selectUserList", userVO); + decryptListIfGnr(result); + return result; } /** * 사용자 정보에 대한 목록 전체 건수를 조회한다. - * + * * @param userVO * @return * @throws Exception */ public int selectUserListCnt(UserInfVO userVO) throws Exception { + fillSearchKeywordHash(userVO); return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectUserListCnt", userVO); } /** * 커뮤니티 사용자 목록을 조회한다. - * + * * @param userVO * @return * @throws Exception */ @SuppressWarnings("unchecked") public List selectCmmntyUserList(UserInfVO userVO) throws Exception { - return list("EgovUserInfManageDAO.selectCmmntyUserList", userVO); + fillSearchKeywordHash(userVO); + List result = list("EgovUserInfManageDAO.selectCmmntyUserList", userVO); + decryptListIfGnr(result); + return result; } /** * 커뮤니티 사용자 목록에 대한 전체 건수를 조회한다. - * + * * @param userVO * @return * @throws Exception */ public int selectCmmntyUserListCnt(UserInfVO userVO) throws Exception { + fillSearchKeywordHash(userVO); return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectCmmntyUserListCnt", userVO); } /** * 커뮤니티 관리자 목록을 조회한다. - * + * * @param userVO * @return * @throws Exception */ @SuppressWarnings("unchecked") public List selectCmmntyMngrList(UserInfVO userVO) throws Exception { - return list("EgovUserInfManageDAO.selectCmmntyMngrList", userVO); + fillSearchKeywordHash(userVO); + List result = list("EgovUserInfManageDAO.selectCmmntyMngrList", userVO); + decryptListIfGnr(result); + return result; } /** * 커뮤니티 관리자 목록에 대한 전체 건수를 조회한다. - * + * * @param userVO * @return * @throws Exception */ public int selectCmmntyMngrListCnt(UserInfVO userVO) throws Exception { + fillSearchKeywordHash(userVO); return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectCmmntyMngrListCnt", userVO); } /** * 동호회 사용자 목록을 조회한다. - * + * * @param userVO * @return * @throws Exception */ @SuppressWarnings("unchecked") public List selectClubUserList(UserInfVO userVO) throws Exception { - return list("EgovUserInfManageDAO.selectClubUserList", userVO); + fillSearchKeywordHash(userVO); + List result = list("EgovUserInfManageDAO.selectClubUserList", userVO); + decryptListIfGnr(result); + return result; } /** * 동호회 사용자 목록에 대한 전체 건수를 조회한다. - * + * * @param userVO * @return * @throws Exception */ public int selectClubUserListCnt(UserInfVO userVO) throws Exception { + fillSearchKeywordHash(userVO); return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectClubUserListCnt", userVO); } /** * 동호회 운영자 목록을 조회한다. - * + * * @param userVO * @return * @throws Exception */ @SuppressWarnings("unchecked") public List selectClubOprtrList(UserInfVO userVO) throws Exception { - return list("EgovUserInfManageDAO.selectClubOprtrList", userVO); + fillSearchKeywordHash(userVO); + List result = list("EgovUserInfManageDAO.selectClubOprtrList", userVO); + decryptListIfGnr(result); + return result; } /** * 동호회 운영자 목록에 대한 전체 건수를 조회한다. - * + * * @param userVO * @return * @throws Exception */ public int selectClubOprtrListCnt(UserInfVO userVO) throws Exception { + fillSearchKeywordHash(userVO); return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectClubOprtrListCnt", userVO); } diff --git a/src/main/java/egovframework/com/cop/scp/service/impl/BBSScrapDAO.java b/src/main/java/egovframework/com/cop/scp/service/impl/BBSScrapDAO.java index 612afd2..635c253 100644 --- a/src/main/java/egovframework/com/cop/scp/service/impl/BBSScrapDAO.java +++ b/src/main/java/egovframework/com/cop/scp/service/impl/BBSScrapDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.Scrap; import egovframework.com.cop.bbs.service.ScrapVO; @@ -36,7 +37,13 @@ public class BBSScrapDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectScrapList(ScrapVO scrapVO) throws Exception { - return list("BBSScrapDAO.selectScrapList", scrapVO); + List result = list("BBSScrapDAO.selectScrapList", scrapVO); + for (ScrapVO row : result) { + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "frstRegisterNm"); + } + } + return result; } /** @@ -78,7 +85,11 @@ public class BBSScrapDAO extends EgovComAbstractDAO { * @throws Exception */ public Scrap selectScrap(ScrapVO scrapVO) throws Exception { - return (Scrap)selectByPk("BBSScrapDAO.selectScrap", scrapVO); + Scrap result = (Scrap)selectByPk("BBSScrapDAO.selectScrap", scrapVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/cop/sms/service/Sms.java b/src/main/java/egovframework/com/cop/sms/service/Sms.java index 179b8bf..e5f2b24 100644 --- a/src/main/java/egovframework/com/cop/sms/service/Sms.java +++ b/src/main/java/egovframework/com/cop/sms/service/Sms.java @@ -134,6 +134,19 @@ public class Sms implements Serializable { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** * frstRegisterPnttm attribute를 리턴한다. * @return the frstRegisterPnttm diff --git a/src/main/java/egovframework/com/cop/sms/service/impl/SmsDAO.java b/src/main/java/egovframework/com/cop/sms/service/impl/SmsDAO.java index f963dcf..324e730 100644 --- a/src/main/java/egovframework/com/cop/sms/service/impl/SmsDAO.java +++ b/src/main/java/egovframework/com/cop/sms/service/impl/SmsDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.sms.service.Sms; import egovframework.com.cop.sms.service.SmsRecptn; @@ -76,7 +77,11 @@ public class SmsDAO extends EgovComAbstractDAO { * @return */ public SmsVO selectSmsInf(SmsVO searchVO) { - return (SmsVO)selectByPk("SmsDAO.selectSmsInf", searchVO); + SmsVO result = (SmsVO)selectByPk("SmsDAO.selectSmsInf", searchVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/cop/stf/service/impl/BBSSatisfactionDAO.java b/src/main/java/egovframework/com/cop/stf/service/impl/BBSSatisfactionDAO.java index 85909c2..61bdba5 100644 --- a/src/main/java/egovframework/com/cop/stf/service/impl/BBSSatisfactionDAO.java +++ b/src/main/java/egovframework/com/cop/stf/service/impl/BBSSatisfactionDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.bbs.service.Satisfaction; import egovframework.com.cop.bbs.service.SatisfactionVO; @@ -36,7 +37,13 @@ public class BBSSatisfactionDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectSatisfactionList(SatisfactionVO satisfactionVO) throws Exception { - return list("BBSSatisfactionDAO.selectSatisfactionList", satisfactionVO); + List result = list("BBSSatisfactionDAO.selectSatisfactionList", satisfactionVO); + for (SatisfactionVO row : result) { + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "frstRegisterNm"); + } + } + return result; } /** @@ -78,7 +85,11 @@ public class BBSSatisfactionDAO extends EgovComAbstractDAO { * @throws Exception */ public Satisfaction selectSatisfaction(SatisfactionVO satisfactionVO) throws Exception { - return (Satisfaction)selectByPk("BBSSatisfactionDAO.selectSatisfaction", satisfactionVO); + Satisfaction result = (Satisfaction)selectByPk("BBSSatisfactionDAO.selectSatisfaction", satisfactionVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/cop/tpl/service/TemplateInfVO.java b/src/main/java/egovframework/com/cop/tpl/service/TemplateInfVO.java index a59bc9d..b43b91a 100644 --- a/src/main/java/egovframework/com/cop/tpl/service/TemplateInfVO.java +++ b/src/main/java/egovframework/com/cop/tpl/service/TemplateInfVO.java @@ -94,6 +94,19 @@ public class TemplateInfVO extends TemplateInf implements Serializable { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String frstRegisterNmSe = ""; + + public String getFrstRegisterNmSe() { + return frstRegisterNmSe; + } + + public void setFrstRegisterNmSe(String frstRegisterNmSe) { + this.frstRegisterNmSe = frstRegisterNmSe; + } + /** * lastUpdusrNm attribute를 리턴한다. * diff --git a/src/main/java/egovframework/com/cop/tpl/service/impl/TemplateManageDAO.java b/src/main/java/egovframework/com/cop/tpl/service/impl/TemplateManageDAO.java index 2046dbe..d9e24c9 100644 --- a/src/main/java/egovframework/com/cop/tpl/service/impl/TemplateManageDAO.java +++ b/src/main/java/egovframework/com/cop/tpl/service/impl/TemplateManageDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.cop.tpl.service.TemplateInf; import egovframework.com.cop.tpl.service.TemplateInfVO; @@ -88,8 +89,11 @@ public class TemplateManageDAO extends EgovComAbstractDAO { * @throws Exception */ public TemplateInfVO selectTemplateInf(TemplateInfVO tmplatInfVO) throws Exception { - return (TemplateInfVO)selectByPk("TemplateManageDAO.selectTemplateInf", tmplatInfVO); - + TemplateInfVO result = (TemplateInfVO)selectByPk("TemplateManageDAO.selectTemplateInf", tmplatInfVO); + if (result != null && "GNR".equals(result.getFrstRegisterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java b/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java index 2017dea..5aa14f7 100644 --- a/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java +++ b/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java @@ -4,6 +4,8 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sec.rgm.service.AuthorGroup; import egovframework.com.sec.rgm.service.AuthorGroupVO; @@ -28,6 +30,42 @@ import egovframework.com.sec.rgm.service.AuthorGroupVO; @Repository("authorGroupDAO") public class AuthorGroupDAO extends EgovComAbstractDAO { + /** + * 이름 읽기전환/검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + * 지연 초기화 — {@link egovframework.com.cmm.privacy.crypto.MemberDataCipher} 정책과 동일. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(AuthorGroupVO vo) { + if (vo == null || !"2".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + /** + * USR01(일반회원) 행만 userNm이 암호문이다. USR02(단체)/USR03(취급자)는 각자 다른 + * 테이블의 평문이므로 무조건 복호화하면 예외가 난다. + */ + private void decryptGnrRowsInPlace(List rows) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + AuthorGroupVO row = rows.get(i); + if (row != null && "USR01".equals(row.getMberTyCode())) { + MemberNmDecryptSupport.decryptInPlace(row, "userNm"); + } + } + } + /** * 그룹별 할당된 권한 목록 조회 * @param authorGroupVO AuthorGroupVO @@ -36,7 +74,10 @@ public class AuthorGroupDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectAuthorGroupList(AuthorGroupVO authorGroupVO) throws Exception { - return list("authorGroupDAO.selectAuthorGroupList", authorGroupVO); + fillSearchKeywordHash(authorGroupVO); + List result = list("authorGroupDAO.selectAuthorGroupList", authorGroupVO); + decryptGnrRowsInPlace(result); + return result; } /** @@ -73,6 +114,7 @@ public class AuthorGroupDAO extends EgovComAbstractDAO { * @exception Exception */ public int selectAuthorGroupListTotCnt(AuthorGroupVO authorGroupVO) throws Exception { + fillSearchKeywordHash(authorGroupVO); return (Integer)getSqlMapClientTemplate().queryForObject("authorGroupDAO.selectAuthorGroupListTotCnt", authorGroupVO); } diff --git a/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java b/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java index 594e90c..ba9122b 100644 --- a/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java +++ b/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java @@ -318,6 +318,19 @@ public class LoginLog implements Serializable { public void setLoginNm(String loginNm) { this.loginNm = loginNm; } - + + /** + * loginNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * GNR일 때만 loginNm이 암호문이다. + */ + private String loginNmSe; + + public String getLoginNmSe() { + return loginNmSe; + } + + public void setLoginNmSe(String loginNmSe) { + this.loginNmSe = loginNmSe; + } } diff --git a/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java b/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java index b99c13f..f406dea 100644 --- a/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java +++ b/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sym.log.clg.service.LoginLog; @@ -89,19 +90,30 @@ public class LoginLogDAO extends EgovComAbstractDAO { * @throws Exception */ public LoginLog selectLoginLog(LoginLog loginLog) throws Exception{ - - return (LoginLog) selectByPk("LoginLogDAO.selectLoginLog", loginLog); - } + + LoginLog result = (LoginLog) selectByPk("LoginLogDAO.selectLoginLog", loginLog); + if (result != null && "GNR".equals(result.getLoginNmSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "loginNm"); + } + return result; + } /** * 접속로그를 목록을 조회한다. - * + * * @param loginLog * @return - * @throws Exception + * @throws Exception */ + @SuppressWarnings("unchecked") public List selectLoginLogInf(LoginLog loginLog) throws Exception{ - return list("LoginLogDAO.selectLoginLogInf", loginLog); + List result = list("LoginLogDAO.selectLoginLogInf", loginLog); + for (LoginLog row : result) { + if ("GNR".equals(row.getLoginNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "loginNm"); + } + } + return result; } /** diff --git a/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java b/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java index dc28458..cb20362 100644 --- a/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java +++ b/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java @@ -387,6 +387,19 @@ public class SysLog implements Serializable { public void setRqsterNm(String rqsterNm) { this.rqsterNm = rqsterNm; } + + /** + * rqsterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String rqsterNmSe; + + public String getRqsterNmSe() { + return rqsterNmSe; + } + + public void setRqsterNmSe(String rqsterNmSe) { + this.rqsterNmSe = rqsterNmSe; + } /** * @return the rqesterIp */ diff --git a/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java b/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java index 8fe3340..220811e 100644 --- a/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java +++ b/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sym.log.lgm.service.SysLog; @@ -57,19 +58,30 @@ public class SysLogDAO extends EgovComAbstractDAO { * @throws Exception */ public SysLog selectSysLog(SysLog sysLog) throws Exception{ - - return (SysLog) selectByPk("SysLogDAO.selectSysLog", sysLog); - } + + SysLog result = (SysLog) selectByPk("SysLogDAO.selectSysLog", sysLog); + if (result != null && "GNR".equals(result.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "rqsterNm"); + } + return result; + } /** * 시스템 로그정보 목록을 조회한다. - * + * * @param sysLog * @return - * @throws Exception + * @throws Exception */ + @SuppressWarnings("unchecked") public List selectSysLogInf(SysLog sysLog) throws Exception{ - return list("SysLogDAO.selectSysLogInf", sysLog); + List result = list("SysLogDAO.selectSysLogInf", sysLog); + for (SysLog row : result) { + if ("GNR".equals(row.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm"); + } + } + return result; } /** diff --git a/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java b/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java index 36a8572..1759b13 100644 --- a/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java +++ b/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java @@ -162,6 +162,30 @@ public class UserLog implements Serializable { this.rqsterNm = rqsterNm; } + /** + * rqsterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String rqsterNmSe = ""; + + public String getRqsterNmSe() { + return rqsterNmSe; + } + + public void setRqsterNmSe(String rqsterNmSe) { + this.rqsterNmSe = rqsterNmSe; + } + + /** 이름 검색 완전일치 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). */ + private String searchKeywordHash = ""; + + public String getSearchKeywordHash() { + return searchKeywordHash; + } + + public void setSearchKeywordHash(String searchKeywordHash) { + this.searchKeywordHash = searchKeywordHash; + } + public String getMethodNm() { return methodNm; } diff --git a/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java b/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java index 5f4bbfd..50f9fca 100644 --- a/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java +++ b/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java @@ -4,6 +4,8 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sym.log.ulg.service.UserLog; @@ -26,12 +28,31 @@ import egovframework.com.sym.log.ulg.service.UserLog; @Repository("userLogDAO") public class UserLogDAO extends EgovComAbstractDAO { + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(UserLog vo) { + if (vo == null) { + return; + } + String kw = vo.getSearchWrd(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** * 사용자 로그정보를 생성한다. - * - * @param + * + * @param * @return - * @throws Exception + * @throws Exception */ public void logInsertUserLog() throws Exception{ insert("UserLogDAO.logInsertUserLog", null); @@ -39,25 +60,37 @@ public class UserLogDAO extends EgovComAbstractDAO { /** * 사용자 로그정보를 조회한다. - * + * * @param userLog * @return userLog - * @throws Exception + * @throws Exception */ public UserLog selectUserLog(UserLog userLog) throws Exception{ - - return (UserLog) selectByPk("UserLogDAO.selectUserLog", userLog); - } + + UserLog result = (UserLog) selectByPk("UserLogDAO.selectUserLog", userLog); + if (result != null && "GNR".equals(result.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "rqsterNm"); + } + return result; + } /** * 사용자 로그정보 목록을 조회한다. - * + * * @param UserLog * @return - * @throws Exception + * @throws Exception */ + @SuppressWarnings("unchecked") public List selectUserLogInf(UserLog userLog) throws Exception{ - return list("UserLogDAO.selectUserLogInf", userLog); + fillSearchKeywordHash(userLog); + List result = list("UserLogDAO.selectUserLogInf", userLog); + for (UserLog row : result) { + if ("GNR".equals(row.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm"); + } + } + return result; } /** @@ -67,8 +100,8 @@ public class UserLogDAO extends EgovComAbstractDAO { * @throws Exception */ public int selectUserLogInfCnt(UserLog userLog) throws Exception{ - + fillSearchKeywordHash(userLog); return (Integer)getSqlMapClientTemplate().queryForObject("UserLogDAO.selectUserLogInfCnt", userLog); } - + } diff --git a/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java b/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java index aa4c1cd..786c45b 100644 --- a/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java +++ b/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java @@ -162,6 +162,19 @@ public class WebLog implements Serializable { this.rqsterNm = rqsterNm; } + /** + * rqsterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String rqsterNmSe; + + public String getRqsterNmSe() { + return rqsterNmSe; + } + + public void setRqsterNmSe(String rqsterNmSe) { + this.rqsterNmSe = rqsterNmSe; + } + public String getRqesterIp() { return rqesterIp; } diff --git a/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java b/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java index c3c7782..43935bb 100644 --- a/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java +++ b/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java @@ -4,6 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sym.log.wlg.service.WebLog; @@ -57,19 +58,30 @@ public class WebLogDAO extends EgovComAbstractDAO { * @throws Exception */ public WebLog selectWebLog(WebLog webLog) throws Exception{ - - return (WebLog) selectByPk("WebLogDAO.selectWebLog", webLog); - } + + WebLog result = (WebLog) selectByPk("WebLogDAO.selectWebLog", webLog); + if (result != null && "GNR".equals(result.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "rqsterNm"); + } + return result; + } /** * 웹 로그정보 목록을 조회한다. - * + * * @param webLog * @return - * @throws Exception + * @throws Exception */ + @SuppressWarnings("unchecked") public List selectWebLogInf(WebLog webLog) throws Exception{ - return list("WebLogDAO.selectWebLogInf", webLog); + List result = list("WebLogDAO.selectWebLogInf", webLog); + for (WebLog row : result) { + if ("GNR".equals(row.getRqsterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm"); + } + } + return result; } /** diff --git a/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java b/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java index bd8afb8..b3cb544 100644 --- a/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java +++ b/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java @@ -16,13 +16,34 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uat.uap.service.LoginPolicy; import egovframework.com.uat.uap.service.LoginPolicyVO; @Repository("loginPolicyDAO") public class LoginPolicyDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(LoginPolicyVO vo) { + if (vo == null || !"1".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** * 로그인정책 목록을 조회한다. * @param loginPolicyVO - 로그인정책 VO @@ -30,7 +51,14 @@ public class LoginPolicyDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectLoginPolicyList(LoginPolicyVO loginPolicyVO) throws Exception { - return list("loginPolicyDAO.selectLoginPolicyList", loginPolicyVO); + fillSearchKeywordHash(loginPolicyVO); + List result = list("loginPolicyDAO.selectLoginPolicyList", loginPolicyVO); + for (LoginPolicyVO row : result) { + if (row != null && "GNR".equals(row.getEmplyrSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "emplyrNm"); + } + } + return result; } /** @@ -39,6 +67,7 @@ public class LoginPolicyDAO extends EgovComAbstractDAO { * @return int */ public int selectLoginPolicyListTotCnt(LoginPolicyVO loginPolicyVO) throws Exception { + fillSearchKeywordHash(loginPolicyVO); return (Integer)getSqlMapClientTemplate().queryForObject("loginPolicyDAO.selectLoginPolicyListTotCnt", loginPolicyVO); } @@ -48,7 +77,12 @@ public class LoginPolicyDAO extends EgovComAbstractDAO { * @return LoginPolicyVO - 로그인정책 VO */ public LoginPolicyVO selectLoginPolicy(LoginPolicyVO loginPolicyVO) throws Exception { - return (LoginPolicyVO)selectByPk("loginPolicyDAO.selectLoginPolicy", loginPolicyVO); + LoginPolicyVO result = (LoginPolicyVO)selectByPk("loginPolicyDAO.selectLoginPolicy", loginPolicyVO); + // GNR(일반회원)만 emplyrNm이 암호문이다 — ENT/USR는 각자 다른 테이블의 평문이다. + if (result != null && "GNR".equals(result.getEmplyrSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "emplyrNm"); + } + return result; } /** diff --git a/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java b/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java index bac7c62..2a082c7 100644 --- a/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java +++ b/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java @@ -8,6 +8,8 @@ import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Repository; import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; /** @@ -31,7 +33,64 @@ public class LoginDAO extends EgovComAbstractDAO { /** log */ protected static final Log LOG = LogFactory.getLog(LoginDAO.class); - + + /** + * 이름 읽기전환/검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + * 지연 초기화 — {@link egovframework.com.cmm.privacy.crypto.MemberDataCipher} 정책과 동일. + */ + private MemberDataHasher mberNmHasher; + + /** + * 일반회원(GNR) 로그인 결과의 {@code name}을 복호화한다. + * + *

ENT/USR/GRO 분기는 각자 다른 테이블의 평문 이름을 그대로 {@code name}에 담으므로 + * 복호화 대상이 아니다 — {@code userSe=="GNR"}일 때만 호출한다(안 그러면 평문에 + * 복호화를 시도해 예외가 난다).

+ */ + private void decryptNameIfGnr(LoginVO vo) { + if (vo != null && "GNR".equals(vo.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "name"); + } + } + + /** + * 아이디/비밀번호 찾기(이름 검색) 완전일치 해시를 채운다. + * {@code userSe=="GNR"}일 때만 의미가 있다 — 다른 회원유형은 여전히 평문 이름으로 비교한다. + */ + private void fillNameHash(LoginVO vo) { + if (vo == null || !"GNR".equals(vo.getUserSe())) { + return; + } + String name = vo.getName(); + if (name == null || name.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setNameHash(mberNmHasher.hashName(name)); + } + + /** + * 아이디 찾기(searchFrtId/searchFrtIdList) 전용 해시 채움. + * COMVNUSERMASTER 뷰는 ENT/GNR/GRO를 한 번에 검색하므로 조회 전에는 회원유형을 알 수 없다 — + * {@link #fillNameHash}처럼 userSe로 게이트할 수 없어 이름이 있으면 무조건 해시를 채운다. + * ENT/GRO 행은 뷰의 해시 컬럼이 NULL이라 자동으로 매칭 안 되고 평문 OR 비교로만 걸린다. + */ + private void fillSearchNameHash(LoginVO vo) { + if (vo == null) { + return; + } + String name = vo.getName(); + if (name == null || name.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setNameHash(mberNmHasher.hashName(name)); + } + /** * 2011.08.26 * EsntlId를 이용한 로그인을 처리한다 @@ -40,7 +99,9 @@ public class LoginDAO extends EgovComAbstractDAO { * @exception Exception */ public LoginVO actionLoginByEsntlId(LoginVO vo) throws Exception { - return (LoginVO)selectByPk("loginDAO.ssoLoginByEsntlId", vo); + LoginVO result = (LoginVO)selectByPk("loginDAO.ssoLoginByEsntlId", vo); + decryptNameIfGnr(result); + return result; } @@ -51,7 +112,9 @@ public class LoginDAO extends EgovComAbstractDAO { * @exception Exception */ public LoginVO actionLogin(LoginVO vo) throws Exception { - return (LoginVO)selectByPk("loginDAO.actionLogin", vo); + LoginVO result = (LoginVO)selectByPk("loginDAO.actionLogin", vo); + decryptNameIfGnr(result); + return result; } /** @@ -88,7 +151,7 @@ public class LoginDAO extends EgovComAbstractDAO { * @exception Exception */ public LoginVO searchId(LoginVO vo) throws Exception { - + fillNameHash(vo); return (LoginVO)selectByPk("loginDAO.searchId", vo); } @@ -99,8 +162,10 @@ public class LoginDAO extends EgovComAbstractDAO { * @exception Exception */ public LoginVO searchFrtId(LoginVO vo) throws Exception { - - return (LoginVO)selectByPk("loginDAO.searchFrtId", vo); + fillSearchNameHash(vo); + LoginVO result = (LoginVO)selectByPk("loginDAO.searchFrtId", vo); + decryptNameIfGnr(result); + return result; } /** @@ -111,7 +176,12 @@ public class LoginDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List searchFrtIdList(LoginVO vo) throws Exception { - return list("loginDAO.searchFrtIdList", vo); + fillSearchNameHash(vo); + List result = list("loginDAO.searchFrtIdList", vo); + for (LoginVO row : result) { + decryptNameIfGnr(row); + } + return result; } /** @@ -121,7 +191,7 @@ public class LoginDAO extends EgovComAbstractDAO { * @exception Exception */ public LoginVO searchPassword(LoginVO vo) throws Exception { - + fillNameHash(vo); return (LoginVO)selectByPk("loginDAO.searchPassword", vo); } @@ -152,7 +222,9 @@ public class LoginDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public LoginVO searchSmsIdList(LoginVO vo) throws Exception { - return (LoginVO) selectByPk("loginDAO.searchSmsIdList", vo); + LoginVO result = (LoginVO) selectByPk("loginDAO.searchSmsIdList", vo); + decryptNameIfGnr(result); + return result; } // KTH. 20190603 로그인 실패 insert @@ -175,7 +247,9 @@ public class LoginDAO extends EgovComAbstractDAO { // 휴먼고객 확인 public LoginVO diapauseChk(LoginVO vo) { - return (LoginVO) selectByPk("loginDAO.diapauseChk", vo); + LoginVO result = (LoginVO) selectByPk("loginDAO.diapauseChk", vo); + decryptNameIfGnr(result); + return result; } // 휴먼고객 확인후 테이블 입력 @@ -200,7 +274,9 @@ public class LoginDAO extends EgovComAbstractDAO { public List selectDiapauseList(LoginVO loginVO) { - return list("loginDAO.selectDiapauseList", loginVO); + List result = list("loginDAO.selectDiapauseList", loginVO); + MemberNmDecryptSupport.decryptListInPlace(result, "name"); + return result; } @@ -247,7 +323,9 @@ public class LoginDAO extends EgovComAbstractDAO { public LoginVO actionIdCheckLogin(LoginVO vo) { - return (LoginVO)selectByPk("loginDAO.actionIdCheckLogin", vo); + LoginVO result = (LoginVO)selectByPk("loginDAO.actionIdCheckLogin", vo); + decryptNameIfGnr(result); + return result; } diff --git a/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java b/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java index 34f16e6..3c2fc4a 100644 --- a/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java +++ b/src/main/java/egovframework/com/uss/olp/qri/service/impl/QustnrRespondInfoDao.java @@ -5,7 +5,11 @@ import java.util.Map; import org.springframework.stereotype.Repository; +import java.util.Map; + import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.olp.qri.service.QustnrRespondInfoVO; /** @@ -26,8 +30,27 @@ import egovframework.com.uss.olp.qri.service.QustnrRespondInfoVO; */ @Repository("qustnrRespondInfoDao") public class QustnrRespondInfoDao extends EgovComAbstractDAO { - - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. searchCondition='FRST_REGISTER_ID'일 때만 이름검색이다. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(ComDefaultVO vo) { + if (vo == null || !"FRST_REGISTER_ID".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + /** * 설문템플릿을 조회한다. * @param map - 조회할 정보가 담긴 map @@ -64,7 +87,12 @@ public class QustnrRespondInfoDao extends EgovComAbstractDAO { * @throws Exception */ public Map selectQustnrRespondInfoManageEmplyrinfo(Map map) throws Exception{ - return (Map)getSqlMapClientTemplate().queryForObject("QustnrRespondInfo.selectQustnrRespondInfoManageEmplyrinfo", map); + Map result = (Map)getSqlMapClientTemplate().queryForObject("QustnrRespondInfo.selectQustnrRespondInfoManageEmplyrinfo", map); + // GNR(일반회원)만 USER_NM이 암호문이다 — USR(취급자)는 평문이다. + if (result != null && "GNR".equals(result.get("USER_SE"))) { + MemberNmDecryptSupport.decryptInPlace(result, "USER_NM"); + } + return result; } /** @@ -101,8 +129,16 @@ public class QustnrRespondInfoDao extends EgovComAbstractDAO { * @return List * @throws Exception */ + @SuppressWarnings("unchecked") public List selectQustnrRespondInfoManageList(ComDefaultVO searchVO) throws Exception{ - return (List)list("QustnrRespondInfo.selectQustnrRespondInfoManage", searchVO); + fillSearchKeywordHash(searchVO); + List result = (List)list("QustnrRespondInfo.selectQustnrRespondInfoManage", searchVO); + for (Map row : result) { + if ("GNR".equals(row.get("FRST_REGISTER_NM_SE"))) { + MemberNmDecryptSupport.decryptInPlace(row, "FRST_REGISTER_NM"); + } + } + return result; } /** @@ -112,6 +148,7 @@ public class QustnrRespondInfoDao extends EgovComAbstractDAO { * @throws Exception */ public int selectQustnrRespondInfoManageListCnt(ComDefaultVO searchVO) throws Exception{ + fillSearchKeywordHash(searchVO); return (Integer)getSqlMapClientTemplate().queryForObject("QustnrRespondInfo.selectQustnrRespondInfoManageCnt", searchVO); } diff --git a/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java index de6cb6e..e5567b2 100644 --- a/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java +++ b/src/main/java/egovframework/com/uss/olp/qrm/service/impl/QustnrRespondManageDao.java @@ -4,7 +4,10 @@ import java.util.List; import org.springframework.stereotype.Repository; +import java.util.Map; + import egovframework.com.cmm.ComDefaultVO; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.olp.qrm.service.QustnrRespondManageVO; /** @@ -32,8 +35,15 @@ public class QustnrRespondManageDao extends EgovComAbstractDAO { * @return List * @throws Exception */ + @SuppressWarnings("unchecked") public List selectQustnrRespondManageList(ComDefaultVO searchVO) throws Exception{ - return (List)list("QustnrRespondManage.selectQustnrRespondManage", searchVO); + List result = (List)list("QustnrRespondManage.selectQustnrRespondManage", searchVO); + for (Map row : result) { + if ("GNR".equals(row.get("FRST_REGISTER_NM_SE"))) { + MemberNmDecryptSupport.decryptInPlace(row, "FRST_REGISTER_NM"); + } + } + return result; } /** diff --git a/src/main/java/egovframework/com/uss/umt/service/impl/DiapauseManageDAO.java b/src/main/java/egovframework/com/uss/umt/service/impl/DiapauseManageDAO.java index 1314573..9a3a989 100644 --- a/src/main/java/egovframework/com/uss/umt/service/impl/DiapauseManageDAO.java +++ b/src/main/java/egovframework/com/uss/umt/service/impl/DiapauseManageDAO.java @@ -4,6 +4,8 @@ import java.util.List; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.DiapauseManageVO; import egovframework.com.uss.umt.service.UserDefaultVO; @@ -11,11 +13,33 @@ import egovframework.com.uss.umt.service.UserDefaultVO; @Repository("diapauseManageDAO") public class DiapauseManageDAO extends EgovComAbstractDAO{ + /** + * 이름 검색 완전일치 해시 계산(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * 지연 초기화 — {@link egovframework.com.cmm.privacy.crypto.MemberDataCipher} 정책과 동일. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(UserDefaultVO vo) { + if (vo == null || !"1".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + public List selectDiapauseList(UserDefaultVO userSearchVO) { + fillSearchKeywordHash(userSearchVO); return list("diapauseManageDAO.selectDiapauseList", userSearchVO); } public int selectDiapauseListTotCnt(UserDefaultVO userSearchVO) { + fillSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("diapauseManageDAO.selectDiapauseListTotCnt", userSearchVO); } @@ -28,14 +52,41 @@ public class DiapauseManageDAO extends EgovComAbstractDAO{ } - // KTH. 20190603 + // KTH. 20190603 + @SuppressWarnings("unchecked") public List selectUserLockCheckList(UserDefaultVO userSearchVO) { - return list("diapauseManageDAO.selectUserLockCheckList", userSearchVO); + fillUserLockSearchKeywordHash(userSearchVO); + List result = list("diapauseManageDAO.selectUserLockCheckList", userSearchVO); + for (DiapauseManageVO row : result) { + if (row != null && "GNR".equals(row.getUser_gubun())) { + MemberNmDecryptSupport.decryptInPlace(row, "user_nm"); + } + } + return result; } // KTH. 20190603 public int selectUserLockCheckListTotCnt(UserDefaultVO userSearchVO) { + fillUserLockSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("diapauseManageDAO.selectUserLockCheckListTotCnt", userSearchVO); } + + /** + * selectUserLockCheckList(Cnt) 전용 해시 채움(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * 이 구문은 searchCondition3='2'로 이름검색을 구분한다(searchCondition='1'을 쓰는 {@link #fillSearchKeywordHash}와 다른 필드). + */ + private void fillUserLockSearchKeywordHash(UserDefaultVO vo) { + if (vo == null || !"2".equals(vo.getSearchCondition3())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } // KTH. 20190603 public void updateUnlock(DiapauseManageVO vo) { update("diapauseManageDAO.updateUnlock", vo); diff --git a/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java b/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java index 7b5249f..b759dab 100644 --- a/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java +++ b/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Repository; import egovframework.com.cmm.privacy.crypto.MemberDataCipher; import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.EntrprsManageVO; import egovframework.com.uss.umt.service.MberManageVO; @@ -183,7 +184,9 @@ public class MberManageDAO extends EgovComAbstractDAO{ * @return MberManageVO 일반회원 상세정보 */ public MberManageVO selectMber(String mberId){ - return (MberManageVO) selectByPk("mberManageDAO.selectMber_S", mberId); + MberManageVO result = (MberManageVO) selectByPk("mberManageDAO.selectMber_S", mberId); + MemberNmDecryptSupport.decryptInPlace(result, "mberNm"); + return result; } /** @@ -278,7 +281,9 @@ public class MberManageDAO extends EgovComAbstractDAO{ } public List selectTopExcelMberList(UserDefaultVO userSearchVO) { - return list("mberManageDAO.selectTopExcelMberList", userSearchVO); + List result = list("mberManageDAO.selectTopExcelMberList", userSearchVO); + MemberNmDecryptSupport.decryptListInPlace(result, "mber_nm"); + return result; } public List selectTopExcelGroupList(UserDefaultVO userSearchVO) { return list("mberManageDAO.selectTopExcelGroupList", userSearchVO); diff --git a/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizMemberDAO.java b/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizMemberDAO.java index 7d80bd1..06cab52 100644 --- a/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizMemberDAO.java +++ b/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizMemberDAO.java @@ -8,21 +8,50 @@ import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizMemberDAO") public class BizMemberDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + * COMVNUSERMASTER 뷰 경유 exact-match 검색도 GNR 암호문 대상이면 매칭이 깨지므로 해시 비교를 병행한다. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(MemberVO vo) { + if (vo == null) { + return; + } + String kw = vo.getKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** 개인회원 리스트 조회 */ @SuppressWarnings("unchecked") public List selectSingleList(MemberVO memberVO) throws Exception { return list("BizMemberDAO.selectSingleList", memberVO); } - + /** 회원마스터 리스트 조회 */ @SuppressWarnings("unchecked") public List selectUsrMasterSingleList(MemberVO memberVO) throws Exception { - return list("BizMemberDAO.selectUsrMasterSingleList", memberVO); + fillSearchKeywordHash(memberVO); + List result = list("BizMemberDAO.selectUsrMasterSingleList", memberVO); + for (MemberVO row : result) { + if (row != null && "GNR".equals(row.getmberSttus())) { + MemberNmDecryptSupport.decryptInPlace(row, "mberNm"); + } + } + return result; } /** 개인회원 총 건수 조회 */ diff --git a/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizNoteDAO.java b/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizNoteDAO.java index 9179377..d04e230 100644 --- a/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizNoteDAO.java +++ b/src/main/java/kr/or/arko/frt/biz/note/service/impl/BizNoteDAO.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizNoteDAO") @@ -92,7 +93,12 @@ public class BizNoteDAO extends EgovComAbstractDAO { /** 개인수신쪽지 상세내용 조회 */ public LoginVO selectSingleNote2(String toId) throws Exception { - return (LoginVO)selectByPk("BizNoteDAO.selectSingleNote2", toId); + LoginVO result = (LoginVO)selectByPk("BizNoteDAO.selectSingleNote2", toId); + // GNR(일반회원)만 name이 암호문이다 — ENT/GRO는 각자 다른 테이블의 평문이다. + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "name"); + } + return result; } /** 그룹쪽지 등록 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/AppconfirmVO.java b/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/AppconfirmVO.java index f94433a..038eef0 100644 --- a/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/AppconfirmVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/AppconfirmVO.java @@ -250,6 +250,19 @@ public class AppconfirmVO extends ProvolVO implements Serializable { this.mberNm = mberNm; } + /** + * mberNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String mberNmSe = ""; + + public String getMberNmSe() { + return mberNmSe; + } + + public void setMberNmSe(String mberNmSe) { + this.mberNmSe = mberNmSe; + } + public String getGroupId() { return groupId; } @@ -402,6 +415,21 @@ public class AppconfirmVO extends ProvolVO implements Serializable { this.authNm = authNm; } + /** + * authNm 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * authNm 은 두 후보(신청자 자신 또는 그룹승인권자) 중 조건부로 하나가 선택되어 채워지므로 + * esntlNm(=userSe)과 다른 별도 판별값이 필요하다. + */ + private String authNmSe = ""; + + public String getAuthNmSe() { + return authNmSe; + } + + public void setAuthNmSe(String authNmSe) { + this.authNmSe = authNmSe; + } + public String getMbtlnum() { return mbtlnum; } @@ -438,6 +466,19 @@ public class AppconfirmVO extends ProvolVO implements Serializable { return approvalgugunNm; } + /** + * approvalgugunNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String approvalgugunNmSe = ""; + + public String getApprovalgugunNmSe() { + return approvalgugunNmSe; + } + + public void setApprovalgugunNmSe(String approvalgugunNmSe) { + this.approvalgugunNmSe = approvalgugunNmSe; + } + public void setApprovalgugunNm(String approvalgugunNm) { this.approvalgugunNm = approvalgugunNm; } diff --git a/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/impl/BizAppconfirmDAO.java b/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/impl/BizAppconfirmDAO.java index 55ae465..5c903c1 100644 --- a/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/impl/BizAppconfirmDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/appconfirm/service/impl/BizAppconfirmDAO.java @@ -13,6 +13,8 @@ import kr.or.arko.mnt.biz.provol.service.ProvolVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.sym.prm.service.ProgrmManageVO; import egovframework.rte.psl.dataaccess.util.EgovMap; @@ -20,6 +22,47 @@ import egovframework.rte.psl.dataaccess.util.EgovMap; @Repository("BizAppconfirmDAO") public class BizAppconfirmDAO extends EgovComAbstractDAO { + /** + * 이름 읽기전환/검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(AppconfirmVO vo) { + if (vo == null) { + return; + } + String cond = vo.getSearchCondition(); + if (!"name".equals(cond) && !"esntlNm".equals(cond) && !"authNm".equals(cond) && !"all".equals(cond)) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptAppconfirmRow(AppconfirmVO row) { + if (row == null) { + return; + } + if ("GNR".equals(row.getMberNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "mberNm"); + } + if ("GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "esntlNm"); + } + if ("GNR".equals(row.getAuthNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "authNm"); + } + if ("GNR".equals(row.getApprovalgugunNmSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "approvalgugunNm"); + } + } + /**총 활동 시간 조회*/ public AppconfirmVO selectAllHourView(AppconfirmVO appconfirmVO) throws Exception { return (AppconfirmVO)selectByPk("BizAppconfirmDAO.selectAllHourView", appconfirmVO); @@ -76,28 +119,44 @@ public class BizAppconfirmDAO extends EgovComAbstractDAO { /** 활동확인 입력 리스트 조회 */ @SuppressWarnings("unchecked") public List selectAppconfirmRegistList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.selectAppconfirmRegistList", appconfirmVO); + List result = list("BizAppconfirmDAO.selectAppconfirmRegistList", appconfirmVO); + for (AppconfirmVO row : result) { + decryptAppconfirmRow(row); + } + return result; } /** 활동확인 리스트 조회 */ @SuppressWarnings("unchecked") public List selectAppconfirmList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.selectAppconfirmList", appconfirmVO); + fillSearchKeywordHash(appconfirmVO); + List result = list("BizAppconfirmDAO.selectAppconfirmList", appconfirmVO); + for (AppconfirmVO row : result) { + decryptAppconfirmRow(row); + } + return result; } /** 활동확인 총 건수 조회 */ public int selectAppconfirmListTotCnt(AppconfirmVO appconfirmVO) throws Exception { + fillSearchKeywordHash(appconfirmVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizAppconfirmDAO.selectAppconfirmListTotCnt", appconfirmVO); } /** 활동승인 리스트 조회 */ @SuppressWarnings("unchecked") public List selectActivityApprovalList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.selectActivityApprovalList", appconfirmVO); + fillSearchKeywordHash(appconfirmVO); + List result = list("BizAppconfirmDAO.selectActivityApprovalList", appconfirmVO); + for (AppconfirmVO row : result) { + decryptAppconfirmRow(row); + } + return result; } /** 활동승인 총 건수 조회 */ public int selectActivityApprovalListTotCnt(AppconfirmVO appconfirmVO) throws Exception { + fillSearchKeywordHash(appconfirmVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizAppconfirmDAO.selectActivityApprovalListTotCnt", appconfirmVO); } @@ -161,7 +220,12 @@ public class BizAppconfirmDAO extends EgovComAbstractDAO { /** 활동확인 : 엑셀 다운*/ @SuppressWarnings("unchecked") public List excelAppconfirmList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO); + fillSearchKeywordHash(appconfirmVO); + List result = list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO); + for (AppconfirmVO row : result) { + decryptAppconfirmRow(row); + } + return result; } /** 확인서 내역 출력 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/event/service/EvtMntVO.java b/src/main/java/kr/or/arko/mnt/biz/event/service/EvtMntVO.java index 5b42e43..3c36112 100644 --- a/src/main/java/kr/or/arko/mnt/biz/event/service/EvtMntVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/event/service/EvtMntVO.java @@ -178,6 +178,20 @@ public class EvtMntVO extends UserDefaultVO{ this.frstRegisterNm = frstRegisterNm; } + /** + * 최초 등록자 유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * GNR(일반회원)일 때만 {@code frstRegisterNm}이 암호문이다. + */ + private String userSe = ""; + + public String getUserSe() { + return userSe; + } + + public void setUserSe(String userSe) { + this.userSe = userSe; + } + public String getOrignlFileNm() { return orignlFileNm; } diff --git a/src/main/java/kr/or/arko/mnt/biz/event/service/impl/BizAwardMntDAO.java b/src/main/java/kr/or/arko/mnt/biz/event/service/impl/BizAwardMntDAO.java index 984f41b..1527691 100644 --- a/src/main/java/kr/or/arko/mnt/biz/event/service/impl/BizAwardMntDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/event/service/impl/BizAwardMntDAO.java @@ -7,6 +7,7 @@ import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.EgovFileMngService; import egovframework.com.cmm.service.EgovFileMngUtil; import egovframework.com.cmm.service.FileVO; @@ -284,7 +285,25 @@ public class BizAwardMntDAO extends EgovComAbstractDAO { /** 이벤트 리스트 조회 */ @SuppressWarnings("unchecked") public List selectEventMgmtList(UserDefaultVO userSearchVO) throws Exception { - return list("BizAwardMntDAO.selectEventMgmtList", userSearchVO); + List result = list("BizAwardMntDAO.selectEventMgmtList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; + } + + /** + * GNR(일반회원)만 frstRegisterNm이 암호문이다(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * USR/ENT/GRO는 각자 다른 테이블의 평문이므로 무조건 복호화하면 예외가 난다. + */ + private void decryptGnrRowsInPlace(List rows) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + EvtMntVO row = rows.get(i); + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "frstRegisterNm"); + } + } } /** 이벤트 총 건수 조회 */ @@ -321,7 +340,11 @@ public class BizAwardMntDAO extends EgovComAbstractDAO { /** 이벤트 상세내용 조회 */ public EvtMntVO selectEventMgmt(EvtMntVO evtMntVO) throws Exception { - return (EvtMntVO)selectByPk("BizAwardMntDAO.selectEventMgmt", evtMntVO); + EvtMntVO result = (EvtMntVO)selectByPk("BizAwardMntDAO.selectEventMgmt", evtMntVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "frstRegisterNm"); + } + return result; } /** 이벤트 수정 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/group/service/GroupManageVO.java b/src/main/java/kr/or/arko/mnt/biz/group/service/GroupManageVO.java index 8d7ca23..f81a6ad 100644 --- a/src/main/java/kr/or/arko/mnt/biz/group/service/GroupManageVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/group/service/GroupManageVO.java @@ -349,6 +349,19 @@ public class GroupManageVO extends GroupManageTalentVO{ public void setEntrprsMberId(String entrprsMberId) { this.entrprsMberId = entrprsMberId; } + + /** + * entrprsMberId(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String entrprsMberIdSe; + + public String getEntrprsMberIdSe() { + return entrprsMberIdSe; + } + + public void setEntrprsMberIdSe(String entrprsMberIdSe) { + this.entrprsMberIdSe = entrprsMberIdSe; + } /** * @return the emplyrId */ diff --git a/src/main/java/kr/or/arko/mnt/biz/group/service/impl/GroupManageDAO.java b/src/main/java/kr/or/arko/mnt/biz/group/service/impl/GroupManageDAO.java index 0b786dd..c523338 100644 --- a/src/main/java/kr/or/arko/mnt/biz/group/service/impl/GroupManageDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/group/service/impl/GroupManageDAO.java @@ -9,6 +9,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.MberManageVO; import egovframework.com.uss.umt.service.UserDefaultVO; @@ -40,8 +41,11 @@ public class GroupManageDAO extends EgovComAbstractDAO{ * @param userSearchVO 검색조건 * @return List 기업회원 목록정보 */ + @SuppressWarnings("unchecked") public List selectGroupMberList(UserDefaultVO userSearchVO){ - return list("groupMberManageDAO.selectGroupMberList", userSearchVO); + List result = list("groupMberManageDAO.selectGroupMberList", userSearchVO); + decryptEntrprsMberIdRows(result); + return result; } /** @@ -143,7 +147,9 @@ public class GroupManageDAO extends EgovComAbstractDAO{ * @param groupMberVO 그룹원정보 */ public List groupMberList(GroupMberVO groupMberVO){ - return list("groupMberManageDAO.groupMberList", groupMberVO); + List result = list("groupMberManageDAO.groupMberList", groupMberVO); + MemberNmDecryptSupport.decryptListInPlace(result, "MBER_NM"); + return result; } /** @@ -225,8 +231,11 @@ public class GroupManageDAO extends EgovComAbstractDAO{ * @param userSearchVO 검색조건 * @return List 기업회원 목록정보 */ + @SuppressWarnings("unchecked") public List selectExcelGroupMberList(UserDefaultVO userSearchVO){ - return list("groupMberManageDAO.selectExcelGroupMberList", userSearchVO); + List result = list("groupMberManageDAO.selectExcelGroupMberList", userSearchVO); + decryptEntrprsMberIdRows(result); + return result; } /** @@ -234,8 +243,34 @@ public class GroupManageDAO extends EgovComAbstractDAO{ * @param userSearchVO 검색조건 * @return List 기업회원 목록정보 */ + @SuppressWarnings("unchecked") public List selectExcelGroupTalentList(UserDefaultVO userSearchVO){ - return list("groupMberManageDAO.selectExcelGroupTalentList", userSearchVO); + List result = list("groupMberManageDAO.selectExcelGroupTalentList", userSearchVO); + decryptEntrprsMberIdRows(result); + return result; + } + + /** + * COMVNUSERMASTER 경유 entrprsMberId(=USER_NM) 조건부 복호화(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * resultClass가 egovMap(Map)/GroupManageVO(Bean) 둘 다 쓰이므로 MemberNmDecryptSupport의 통일된 처리에 위임한다. + */ + @SuppressWarnings("rawtypes") + private void decryptEntrprsMberIdRows(List result) { + if (result == null) { + return; + } + for (Object row : result) { + try { + Object se = row instanceof java.util.Map + ? ((java.util.Map) row).get("entrprsMberIdSe") + : org.apache.commons.beanutils.PropertyUtils.getProperty(row, "entrprsMberIdSe"); + if ("GNR".equals(se)) { + MemberNmDecryptSupport.decryptInPlace(row, "entrprsMberId"); + } + } catch (Exception e) { + throw new IllegalStateException("[개인정보/암호화] entrprsMberId 판별/복호화 실패", e); + } + } } public void updateGroupMatchService(GroupManageVO groupManageVO){ diff --git a/src/main/java/kr/or/arko/mnt/biz/prbro/service/PrbroVO.java b/src/main/java/kr/or/arko/mnt/biz/prbro/service/PrbroVO.java index b2bf22b..b501ed1 100644 --- a/src/main/java/kr/or/arko/mnt/biz/prbro/service/PrbroVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/prbro/service/PrbroVO.java @@ -191,6 +191,19 @@ public class PrbroVO extends ComDefaultVO { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String frstRegisterNmSe = ""; + + public String getFrstRegisterNmSe() { + return frstRegisterNmSe; + } + + public void setFrstRegisterNmSe(String frstRegisterNmSe) { + this.frstRegisterNmSe = frstRegisterNmSe; + } + public String getOrignlFileNm() { return orignlFileNm; } diff --git a/src/main/java/kr/or/arko/mnt/biz/prbro/service/impl/BizPrbroDAO.java b/src/main/java/kr/or/arko/mnt/biz/prbro/service/impl/BizPrbroDAO.java index 0778ef1..dbfe8e5 100644 --- a/src/main/java/kr/or/arko/mnt/biz/prbro/service/impl/BizPrbroDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/prbro/service/impl/BizPrbroDAO.java @@ -8,25 +8,60 @@ import kr.or.arko.mnt.biz.prbro.service.PrbroVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizPrbroDAO") public class BizPrbroDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(PrbroVO vo) { + if (vo == null || !"all".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptIfGnr(PrbroVO vo) { + if (vo != null && "GNR".equals(vo.getFrstRegisterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "frstRegisterNm"); + } + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectPrbroList(PrbroVO prbroVO) throws Exception { - return list("BizPrbroDAO.selectPrbroList", prbroVO); + fillSearchKeywordHash(prbroVO); + List result = list("BizPrbroDAO.selectPrbroList", prbroVO); + for (PrbroVO row : result) { + decryptIfGnr(row); + } + return result; } /** 총 건수 조회 */ public int selectPrbroListTotCnt(PrbroVO prbroVO) throws Exception { + fillSearchKeywordHash(prbroVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizPrbroDAO.selectPrbroListTotCnt", prbroVO); } /** 상세내용 조회 */ public PrbroVO selectPrbro(PrbroVO prbroVO) throws Exception { - return (PrbroVO)selectByPk("BizPrbroDAO.selectPrbro", prbroVO); + PrbroVO result = (PrbroVO)selectByPk("BizPrbroDAO.selectPrbro", prbroVO); + decryptIfGnr(result); + return result; } /** 등록 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/prmvp/service/PrmvpVO.java b/src/main/java/kr/or/arko/mnt/biz/prmvp/service/PrmvpVO.java index b42c56c..3b132e1 100644 --- a/src/main/java/kr/or/arko/mnt/biz/prmvp/service/PrmvpVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/prmvp/service/PrmvpVO.java @@ -200,6 +200,19 @@ public class PrmvpVO extends ComDefaultVO { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String frstRegisterNmSe = ""; + + public String getFrstRegisterNmSe() { + return frstRegisterNmSe; + } + + public void setFrstRegisterNmSe(String frstRegisterNmSe) { + this.frstRegisterNmSe = frstRegisterNmSe; + } + public String getOrignlFileNm() { return orignlFileNm; } diff --git a/src/main/java/kr/or/arko/mnt/biz/prmvp/service/impl/BizPrmvpDAO.java b/src/main/java/kr/or/arko/mnt/biz/prmvp/service/impl/BizPrmvpDAO.java index ebee336..ed277d1 100644 --- a/src/main/java/kr/or/arko/mnt/biz/prmvp/service/impl/BizPrmvpDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/prmvp/service/impl/BizPrmvpDAO.java @@ -8,25 +8,60 @@ import kr.or.arko.mnt.biz.prmvp.service.PrmvpVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizPrmvpDAO") public class BizPrmvpDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(PrmvpVO vo) { + if (vo == null || !"all".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptIfGnr(PrmvpVO vo) { + if (vo != null && "GNR".equals(vo.getFrstRegisterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "frstRegisterNm"); + } + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectPrmvpList(PrmvpVO prmvpVO) throws Exception { - return list("BizPrmvpDAO.selectPrmvpList", prmvpVO); + fillSearchKeywordHash(prmvpVO); + List result = list("BizPrmvpDAO.selectPrmvpList", prmvpVO); + for (PrmvpVO row : result) { + decryptIfGnr(row); + } + return result; } /** 총 건수 조회 */ public int selectPrmvpListTotCnt(PrmvpVO prmvpVO) throws Exception { + fillSearchKeywordHash(prmvpVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizPrmvpDAO.selectPrmvpListTotCnt", prmvpVO); } /** 상세내용 조회 */ public PrmvpVO selectPrmvp(PrmvpVO prmvpVO) throws Exception { - return (PrmvpVO)selectByPk("BizPrmvpDAO.selectPrmvp", prmvpVO); + PrmvpVO result = (PrmvpVO)selectByPk("BizPrmvpDAO.selectPrmvp", prmvpVO); + decryptIfGnr(result); + return result; } /** 등록 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/proapp/service/ProappVO.java b/src/main/java/kr/or/arko/mnt/biz/proapp/service/ProappVO.java index 09d6163..cb429cf 100644 --- a/src/main/java/kr/or/arko/mnt/biz/proapp/service/ProappVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/proapp/service/ProappVO.java @@ -170,6 +170,31 @@ public class ProappVO extends ProvolVO implements Serializable { this.mberNm = mberNm; } + /** mberNm 완전일치 검증용 해시(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). */ + private String mberNmHash = ""; + + public String getMberNmHash() { + return mberNmHash; + } + + public void setMberNmHash(String mberNmHash) { + this.mberNmHash = mberNmHash; + } + + /** + * mberNm 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * GNR일 때만 mberNm이 암호문이다. esntlNm 은 {@link ProvolVO#getUserSe()}를 그대로 쓴다(동일 의미). + */ + private String mberNmSe = ""; + + public String getMberNmSe() { + return mberNmSe; + } + + public void setMberNmSe(String mberNmSe) { + this.mberNmSe = mberNmSe; + } + public String getMbtlnum() { return mbtlnum; } diff --git a/src/main/java/kr/or/arko/mnt/biz/proapp/service/impl/BizProappDAO.java b/src/main/java/kr/or/arko/mnt/biz/proapp/service/impl/BizProappDAO.java index eabb2c7..e9f3c05 100644 --- a/src/main/java/kr/or/arko/mnt/biz/proapp/service/impl/BizProappDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/proapp/service/impl/BizProappDAO.java @@ -10,16 +10,49 @@ import kr.or.arko.mnt.biz.provol.service.ProvolVO; import org.springframework.stereotype.Repository; -import egovframework.com.cmm.service.impl.EgovComAbstractDAO; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.UserDefaultVO; @Repository("BizProappDAO") public class BizProappDAO extends EgovComAbstractDAO { - + + private MemberDataHasher mberNmHasher; + + /** + * COMVNUSERMASTER 경유 이름 필드 조건부 복호화(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * GNR(일반회원)일 때만 해당 필드가 암호문이다. + */ + private void decryptIfGnr(Object row, String nameField, String seField) { + if (row == null) { + return; + } + try { + Object se = org.apache.commons.beanutils.PropertyUtils.getProperty(row, seField); + if ("GNR".equals(se)) { + MemberNmDecryptSupport.decryptInPlace(row, nameField); + } + } catch (Exception e) { + throw new IllegalStateException("[개인정보/암호화] " + nameField + " 판별/복호화 실패", e); + } + } + + private void decryptListIfGnr(List rows, String nameField, String seField) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + decryptIfGnr(rows.get(i), nameField, seField); + } + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectProappList(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectProappList", proappVO); + List result = list("BizProappDAO.selectProappList", proappVO); + decryptListIfGnr(result, "mberNm", "mberNmSe"); + return result; } /** 총 건수 조회 */ @@ -57,9 +90,11 @@ public class BizProappDAO extends EgovComAbstractDAO { update("BizProappDAO.updateProapp", proappVO); } - /** 활동하기정보관리 조회 / 봉사신청 확인 */ + /** 활동하기정보관리 조회 / 봉사신청 확인 */ public List selectProappinfoList(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectProappinfoList", proappVO); + List result = list("BizProappDAO.selectProappinfoList", proappVO); + decryptListIfGnr(result, "esntlNm", "userSe"); + return result; } /** 활동하기정보관리 / 봉사신청 확인 총 건수 조회 */ @@ -75,7 +110,9 @@ public class BizProappDAO extends EgovComAbstractDAO { /** 활동하기정보관리 / 모집정보스크랩 조회 */ @SuppressWarnings("unchecked") public List selectProappscrapList(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectProappscrapList", proappVO); + List result = list("BizProappDAO.selectProappscrapList", proappVO); + decryptListIfGnr(result, "esntlNm", "userSe"); + return result; } /** 활동하기정보관리 / 모집정보스크랩 총 건수 조회 */ @@ -88,15 +125,21 @@ public class BizProappDAO extends EgovComAbstractDAO { delete("BizProappDAO.deleteProappscrap", provolVO); } - /**활동내역확인 */ + /**활동내역확인 */ @SuppressWarnings("unchecked") public List selectActivityCnfirmList(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectActivityCnfirmList", proappVO); + List result = list("BizProappDAO.selectActivityCnfirmList", proappVO); + decryptListIfGnr(result, "esntlNm", "userSe"); + decryptListIfGnr(result, "authNm", "authNmSe"); + return result; } - - /**확인서 활동내역확인 */ + + /**확인서 활동내역확인 */ public List selectActivityCnfirm_S(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectActivityCnfirm_S", proappVO); + List result = list("BizProappDAO.selectActivityCnfirm_S", proappVO); + decryptListIfGnr(result, "esntlNm", "userSe"); + decryptListIfGnr(result, "authNm", "authNmSe"); + return result; } /**활동내역확인 총 건수 조회 */ @@ -109,10 +152,18 @@ public class BizProappDAO extends EgovComAbstractDAO { return (ProappVO)selectByPk("BizProappDAO.GetActivityMaxNo", proappVO); } - /** 활동내역확인 출력내역 키 */ + /** 활동내역확인 출력내역 키 */ public ProappVO selectActivityCertification(ProappVO proappVO){ - return (ProappVO)selectByPk("BizProappDAO.selectActivityCertification", proappVO); - } + if (proappVO != null && proappVO.getMberNm() != null && proappVO.getMberNm().trim().length() > 0) { + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + proappVO.setMberNmHash(mberNmHasher.hashName(proappVO.getMberNm())); + } + ProappVO result = (ProappVO)selectByPk("BizProappDAO.selectActivityCertification", proappVO); + decryptIfGnr(result, "mberNm", "mberNmSe"); + return result; + } /** 활동내역확인 내역 키값 저장 */ public void insertProappActivity(ProappVO proappVO) throws Exception { @@ -129,12 +180,16 @@ public class BizProappDAO extends EgovComAbstractDAO { /**활동내역확인 내역출력:개인 */ public ProappVO selectActivityCnfirmPrint(ProappVO proappVO) throws Exception { - return (ProappVO)selectByPk("BizProappDAO.selectActivityCnfirmPrint", proappVO); + ProappVO result = (ProappVO)selectByPk("BizProappDAO.selectActivityCnfirmPrint", proappVO); + MemberNmDecryptSupport.decryptInPlace(result, "mberNm"); + return result; } - /**활동내역확인 내역출력:그룹 */ + /**활동내역확인 내역출력:그룹 */ public ProappVO selectGroupActivityCnfirmPrint(ProappVO proappVO) throws Exception { - return (ProappVO)selectByPk("BizProappDAO.selectGroupActivityCnfirmPrint", proappVO); + ProappVO result = (ProappVO)selectByPk("BizProappDAO.selectGroupActivityCnfirmPrint", proappVO); + decryptIfGnr(result, "esntlNm", "userSe"); + return result; } /** 총시간/봉사회수/마일리지 */ @@ -145,7 +200,10 @@ public class BizProappDAO extends EgovComAbstractDAO { /**활동내역확인 : 그룹 */ @SuppressWarnings("unchecked") public List selectActivityGroupCnfirmList(ProappVO proappVO) throws Exception { - return list("BizProappDAO.selectActivityGroupCnfirmList", proappVO); + List result = list("BizProappDAO.selectActivityGroupCnfirmList", proappVO); + decryptListIfGnr(result, "esntlNm", "userSe"); + decryptListIfGnr(result, "authNm", "authNmSe"); + return result; } /**활동내역확인 총 건수 조회 : 그룹 */ @@ -155,18 +213,27 @@ public class BizProappDAO extends EgovComAbstractDAO { /**모집정보 신청 수정 */ public ProappVO selectProapp(ProappVO proappVO) throws Exception { - return (ProappVO)selectByPk("BizProappDAO.selectProapp", proappVO); - } + ProappVO result = (ProappVO)selectByPk("BizProappDAO.selectProapp", proappVO); + decryptIfGnr(result, "mberNm", "mberNmSe"); + return result; + } /** 중간활동내역 조회 */ public List selectMiddleActivityList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.selectMiddleAppconfirmList", appconfirmVO); - } - + List result = list("BizAppconfirmDAO.selectMiddleAppconfirmList", appconfirmVO); + decryptListIfGnr(result, "mberNm", "mberNmSe"); + return result; + } + /** 중간활동 신청내역 조회 */ public List selectMiddleConfirmList(AppconfirmVO appconfirmVO) throws Exception { - return list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO); - } + List result = list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO); + decryptListIfGnr(result, "mberNm", "mberNmSe"); + decryptListIfGnr(result, "esntlNm", "userSe"); + decryptListIfGnr(result, "authNm", "authNmSe"); + decryptListIfGnr(result, "approvalgugunNm", "approvalgugunNmSe"); + return result; + } /** 중간활동 신청내역 조회 토탈*/ public int selectMiddleActivityListTotCnt(AppconfirmVO appconfirmVO) throws Exception { diff --git a/src/main/java/kr/or/arko/mnt/biz/provol/service/impl/BizProvolDAO.java b/src/main/java/kr/or/arko/mnt/biz/provol/service/impl/BizProvolDAO.java index 6ba9273..97e09a2 100644 --- a/src/main/java/kr/or/arko/mnt/biz/provol/service/impl/BizProvolDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/provol/service/impl/BizProvolDAO.java @@ -9,27 +9,77 @@ import kr.or.arko.mnt.biz.provol.service.ProvolVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.UserDefaultVO; import egovframework.rte.psl.dataaccess.util.EgovMap; @Repository("BizProvolDAO") public class BizProvolDAO extends EgovComAbstractDAO { - + + /** + * GNR(일반회원)만 esntlNm이 암호문이다(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + * USR/ENT/GRO는 각자 다른 테이블의 평문이므로 무조건 복호화하면 예외가 난다. + */ + private void decryptGnrRowsInPlace(List rows) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + ProvolVO row = rows.get(i); + if (row != null && "GNR".equals(row.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(row, "esntlNm"); + } + } + } + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + * searchCondition='en'(이름검색) 또는 'all'(통합검색)일 때만 해시를 채운다 — SQL의 X.USER_NM_HASH OR-분기와 짝을 맞춤. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(UserDefaultVO vo) { + if (vo == null) { + return; + } + String cond = vo.getSearchCondition(); + if (!"en".equals(cond) && !"all".equals(cond)) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectProvolList(UserDefaultVO userSearchVO) throws Exception { - return list("BizProvolDAO.selectProvolList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("BizProvolDAO.selectProvolList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; } /** 총 건수 조회 */ public int selectProvolListTotCnt(UserDefaultVO userSearchVO) throws Exception { + fillSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizProvolDAO.selectProvolListTotCnt", userSearchVO); } /** 상세내용 조회 */ public ProvolVO selectProvol(ProvolVO provolVO) throws Exception { - return (ProvolVO)selectByPk("BizProvolDAO.selectProvol", provolVO); + ProvolVO result = (ProvolVO)selectByPk("BizProvolDAO.selectProvol", provolVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "esntlNm"); + } + return result; } /** 등록 */ @@ -54,7 +104,11 @@ public class BizProvolDAO extends EgovComAbstractDAO { /** 수정내용 조회 */ public ProvolVO modyProvolview(ProvolVO provolVO) throws Exception { - return (ProvolVO)selectByPk("BizProvolDAO.modyProvolview", provolVO); + ProvolVO result = (ProvolVO)selectByPk("BizProvolDAO.modyProvolview", provolVO); + if (result != null && "GNR".equals(result.getUserSe())) { + MemberNmDecryptSupport.decryptInPlace(result, "esntlNm"); + } + return result; } /** 삭제 */ @@ -65,13 +119,18 @@ public class BizProvolDAO extends EgovComAbstractDAO { /** 엑셀다운로드 */ @SuppressWarnings("unchecked") public List excelProvolList(UserDefaultVO userSearchVO) throws Exception { - return list("BizProvolDAO.excelProvolList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("BizProvolDAO.excelProvolList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; } /** 맞춤봉사정보 List*/ @SuppressWarnings("unchecked") public List selectMatchServiceinfoList(ProvolVO provolVO) throws Exception { - return list("BizProvolDAO.selectMatchServiceinfoList", provolVO); + List result = list("BizProvolDAO.selectMatchServiceinfoList", provolVO); + decryptGnrRowsInPlace(result); + return result; } /** 맞춤봉사정보 총 건수 조회 */ @@ -82,17 +141,24 @@ public class BizProvolDAO extends EgovComAbstractDAO { /** 리스트 조회 : 그룹 */ @SuppressWarnings("unchecked") public List selectProvolGroupList(UserDefaultVO userSearchVO) throws Exception { - return list("BizProvolDAO.selectProvolGroupList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("BizProvolDAO.selectProvolGroupList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; } /** 총 건수 조회 : 그룹 */ public int selectProvolGroupListTotCnt(UserDefaultVO userSearchVO) throws Exception { + fillSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizProvolDAO.selectProvolGroupListTotCnt", userSearchVO); } - + @SuppressWarnings("unchecked") public List selectProvolRecruitList(UserDefaultVO userSearchVO) throws Exception { - return list("BizProvolDAO.selectProvolRecruitList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("BizProvolDAO.selectProvolRecruitList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; } /** 봉사정보 메일 조회 리스트 */ @@ -125,7 +191,10 @@ public class BizProvolDAO extends EgovComAbstractDAO { /** 리스트 조회 */ public List selectProvolMailingList(UserDefaultVO userSearchVO) throws Exception { - return list("BizProvolDAO.selectProvolMailingList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("BizProvolDAO.selectProvolMailingList", userSearchVO); + decryptGnrRowsInPlace(result); + return result; } /** 지역맞춤 봉사 승인 프로세스 */ @@ -139,6 +208,8 @@ public class BizProvolDAO extends EgovComAbstractDAO { public List selectMatchAgainList(ProvolVO provolVO) { // TODO Auto-generated method stub - return list("BizProvolDAO.selectMatchAgainList", provolVO); + List result = list("BizProvolDAO.selectMatchAgainList", provolVO); + decryptGnrRowsInPlace(result); + return result; } } diff --git a/src/main/java/kr/or/arko/mnt/biz/sample/service/SampleVO.java b/src/main/java/kr/or/arko/mnt/biz/sample/service/SampleVO.java index 9b16919..b88454d 100644 --- a/src/main/java/kr/or/arko/mnt/biz/sample/service/SampleVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/sample/service/SampleVO.java @@ -149,6 +149,19 @@ public class SampleVO extends ComDefaultVO { this.frstRegisterNm = frstRegisterNm; } + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String frstRegisterNmSe = ""; + + public String getFrstRegisterNmSe() { + return frstRegisterNmSe; + } + + public void setFrstRegisterNmSe(String frstRegisterNmSe) { + this.frstRegisterNmSe = frstRegisterNmSe; + } + public String getAtchFileId() { return atchFileId; } diff --git a/src/main/java/kr/or/arko/mnt/biz/sample/service/impl/BizSampleDAO.java b/src/main/java/kr/or/arko/mnt/biz/sample/service/impl/BizSampleDAO.java index 199ca2d..77b8391 100644 --- a/src/main/java/kr/or/arko/mnt/biz/sample/service/impl/BizSampleDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/sample/service/impl/BizSampleDAO.java @@ -8,25 +8,61 @@ import kr.or.arko.mnt.biz.sample.service.SampleVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizSampleDAO") public class BizSampleDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(SampleVO vo) { + String cond = vo.getSearchCondition(); + if (!"nm".equals(cond) && !"all".equals(cond)) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptIfGnr(SampleVO vo) { + if (vo != null && "GNR".equals(vo.getFrstRegisterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "frstRegisterNm"); + } + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectSampleList(SampleVO sampleVO) throws Exception { - return list("BizSampleDAO.selectSampleList", sampleVO); + fillSearchKeywordHash(sampleVO); + List result = list("BizSampleDAO.selectSampleList", sampleVO); + for (SampleVO row : result) { + decryptIfGnr(row); + } + return result; } /** 총 건수 조회 */ public int selectSampleListTotCnt(SampleVO sampleVO) throws Exception { + fillSearchKeywordHash(sampleVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizSampleDAO.selectSampleListTotCnt", sampleVO); } /** 상세내용 조회 */ public SampleVO selectSample(SampleVO sampleVO) throws Exception { - return (SampleVO)selectByPk("BizSampleDAO.selectSample", sampleVO); + SampleVO result = (SampleVO)selectByPk("BizSampleDAO.selectSample", sampleVO); + decryptIfGnr(result); + return result; } /** 등록 */ diff --git a/src/main/java/kr/or/arko/mnt/biz/stat/service/ApprovalStatSummaryVO.java b/src/main/java/kr/or/arko/mnt/biz/stat/service/ApprovalStatSummaryVO.java index 5cd96a6..1b09cc3 100644 --- a/src/main/java/kr/or/arko/mnt/biz/stat/service/ApprovalStatSummaryVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/stat/service/ApprovalStatSummaryVO.java @@ -57,6 +57,19 @@ public class ApprovalStatSummaryVO extends StatSummaryVO { public void setMberNm(String mberNm) { this.mberNm = mberNm; } + + /** + * mberNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String mberNmSe; + + public String getMberNmSe() { + return mberNmSe; + } + + public void setMberNmSe(String mberNmSe) { + this.mberNmSe = mberNmSe; + } public String getVolunteerTitle() { return volunteerTitle; @@ -105,6 +118,19 @@ public class ApprovalStatSummaryVO extends StatSummaryVO { public void setEsntlNm(String esntlNm) { this.esntlNm = esntlNm; } + + /** + * esntlNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String esntlNmSe; + + public String getEsntlNmSe() { + return esntlNmSe; + } + + public void setEsntlNmSe(String esntlNmSe) { + this.esntlNmSe = esntlNmSe; + } public String getApprovalGugunDate() { return approvalGugunDate; diff --git a/src/main/java/kr/or/arko/mnt/biz/stat/service/StatSummaryVO.java b/src/main/java/kr/or/arko/mnt/biz/stat/service/StatSummaryVO.java index 83d0dc7..d2acffa 100644 --- a/src/main/java/kr/or/arko/mnt/biz/stat/service/StatSummaryVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/stat/service/StatSummaryVO.java @@ -71,10 +71,23 @@ public class StatSummaryVO extends StatConditionVO { public void setAggregatorNm(String aggregatorNm) { this.aggregatorNm = aggregatorNm; } - + public String getAggregatorNm() { return aggregatorNm; } + + /** + * aggregatorNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String aggregatorNmSe; + + public String getAggregatorNmSe() { + return aggregatorNmSe; + } + + public void setAggregatorNmSe(String aggregatorNmSe) { + this.aggregatorNmSe = aggregatorNmSe; + } public void setAggregationDate(String aggregationDate) { this.aggregationDate = aggregationDate; diff --git a/src/main/java/kr/or/arko/mnt/biz/stat/service/impl/BizStatDAO.java b/src/main/java/kr/or/arko/mnt/biz/stat/service/impl/BizStatDAO.java index 11ab0e4..7ace8a9 100644 --- a/src/main/java/kr/or/arko/mnt/biz/stat/service/impl/BizStatDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/stat/service/impl/BizStatDAO.java @@ -8,12 +8,30 @@ import kr.or.arko.mnt.biz.stat.service.*; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.UserDefaultVO; @Repository("bizStatDAO") public class BizStatDAO extends EgovComAbstractDAO { - + + /** + * COMVNUSERMASTER 경유 이름 필드 조건부 복호화(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private void decryptIfGnr(Object row, String nameField, String seField) { + if (row == null) { + return; + } + try { + Object se = org.apache.commons.beanutils.PropertyUtils.getProperty(row, seField); + if ("GNR".equals(se)) { + MemberNmDecryptSupport.decryptInPlace(row, nameField); + } + } catch (Exception e) { + throw new IllegalStateException("[개인정보/암호화] " + nameField + " 판별/복호화 실패", e); + } + } + /** 지역별 회원가입통계 (전체) */ @SuppressWarnings("unchecked") public List selectMberStat(StatVO statVO) throws Exception { @@ -469,7 +487,11 @@ public class BizStatDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List selectStatSummaries(StatConditionVO searchVO) throws Exception { - return list("BizStatDAO.selectStatSummaries", searchVO); + List result = list("BizStatDAO.selectStatSummaries", searchVO); + for (StatSummaryVO row : result) { + decryptIfGnr(row, "aggregatorNm", "aggregatorNmSe"); + } + return result; } /** @@ -611,7 +633,12 @@ public class BizStatDAO extends EgovComAbstractDAO { */ @SuppressWarnings("unchecked") public List aggregateApprovalStats(StatSummaryVO statVO) throws Exception { - return list("BizStatDAO.aggregateApprovalStats", statVO); + List result = list("BizStatDAO.aggregateApprovalStats", statVO); + for (ApprovalStatSummaryVO row : result) { + decryptIfGnr(row, "mberNm", "mberNmSe"); + decryptIfGnr(row, "esntlNm", "esntlNmSe"); + } + return result; } /** diff --git a/src/main/java/kr/or/arko/mnt/biz/talent/service/impl/TalentMberManageDAO.java b/src/main/java/kr/or/arko/mnt/biz/talent/service/impl/TalentMberManageDAO.java index d1e92f0..856ab68 100644 --- a/src/main/java/kr/or/arko/mnt/biz/talent/service/impl/TalentMberManageDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/talent/service/impl/TalentMberManageDAO.java @@ -6,16 +6,38 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; import egovframework.com.uss.umt.service.MberManageVO; import egovframework.com.uss.umt.service.UserDefaultVO; @Repository("talentMberManageDAO") public class TalentMberManageDAO extends EgovComAbstractDAO{ - + /** Log Info */ protected Log log = LogFactory.getLog(this.getClass()); + /** + * 이름 읽기전환/검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + * 지연 초기화 — {@link egovframework.com.cmm.privacy.crypto.MemberDataCipher} 정책과 동일. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(UserDefaultVO vo) { + if (vo == null || !"1".equals(vo.getSearchCondition())) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + /** * 기 등록된 특정 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력 * @param userSearchVO 검색조건 @@ -23,36 +45,44 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{ */ @SuppressWarnings("unchecked") public List selectTalentMberList(UserDefaultVO userSearchVO){ - return list("talentMberManageDAO.selectTalentMberList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("talentMberManageDAO.selectTalentMberList", userSearchVO); + MemberNmDecryptSupport.decryptListInPlace(result, "mberNm"); + return result; } - + /** * 일반회원 총 갯수를 조회한다. * @param userSearchVO 검색조건 * @return int 재능회원총갯수 */ public int selectTalentMberListTotCnt(UserDefaultVO userSearchVO) { + fillSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("talentMberManageDAO.selectTalentMberListTotCnt", userSearchVO); } - + /** * 기 등록된 사용자 중 검색조건에 맞는일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력 * @param mberId 상세조회대상 일반회원아이디 * @return MberManageVO 일반회원 상세정보 */ public MberManageVO selectTalentMber(String mberId){ - return (MberManageVO) selectByPk("talentMberManageDAO.selectTalentMber_S", mberId); + MberManageVO result = (MberManageVO) selectByPk("talentMberManageDAO.selectTalentMber_S", mberId); + MemberNmDecryptSupport.decryptInPlace(result, "mberNm"); + return result; } - + /** * 기 등록된 사용자 중 검색조건에 맞는일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력 * @param mberId 상세조회대상 일반회원아이디 * @return MberManageVO 일반회원 상세정보 */ public MberManageVO selectTalentMberSingle(String mberId){ - return (MberManageVO) selectByPk("talentMberManageDAO.selectTalentMber_Single", mberId); + MberManageVO result = (MberManageVO) selectByPk("talentMberManageDAO.selectTalentMber_Single", mberId); + MemberNmDecryptSupport.decryptInPlace(result, "mberNm"); + return result; } - + /** * 기 등록된 특정 일반회원의 정보를 데이터베이스에서 읽어와 엑셀화면에 출력 * @param userSearchVO 검색조건 @@ -60,25 +90,51 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{ */ @SuppressWarnings("unchecked") public List selectExcelTalentMberList(UserDefaultVO userSearchVO){ - return list("talentMberManageDAO.selectExcelTalentMberList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List result = list("talentMberManageDAO.selectExcelTalentMberList", userSearchVO); + MemberNmDecryptSupport.decryptListInPlace(result, "mberNm"); + return result; } /** * 기 등록된 특정 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력 + * + *

일반회원(GNR)·그룹(GRO)이 UNION 되어 반환된다. MBER_NM 컬럼은 GNR 행은 암호문, + * GRO 행은 평문(그룹명, 암호화 대상 아님)이 섞여 있으므로 복호화는 반드시 조건부로 한다 + * — {@link MemberNmDecryptSupport}를 행 전체에 무조건 적용하면 GRO 행의 평문에 + * 복호화를 시도해 예외가 난다.

+ * * @param userSearchVO 검색조건 * @return List 기업회원 목록정보 */ @SuppressWarnings("unchecked") public List selectJoinTalentMberList(UserDefaultVO userSearchVO){ - return list("talentMberManageDAO.selectJoinTalentMberList", userSearchVO); + fillSearchKeywordHash(userSearchVO); + List> result = list("talentMberManageDAO.selectJoinTalentMberList", userSearchVO); + decryptGnrRowsInPlace(result); + return (List) result; } - + /** * 일반회원 총 갯수를 조회한다. * @param userSearchVO 검색조건 * @return int 재능회원총갯수 */ public int selectJoinTalentMberListTotCnt(UserDefaultVO userSearchVO) { + fillSearchKeywordHash(userSearchVO); return (Integer)getSqlMapClientTemplate().queryForObject("talentMberManageDAO.selectJoinTalentMberListTotCnt", userSearchVO); } + + /** USER_TYPE='GNR' 행만 골라 MBER_NM(암호문)을 복호화한다. GRO 행(그룹명, 평문)은 건드리지 않는다. */ + private void decryptGnrRowsInPlace(List> rows) { + if (rows == null) { + return; + } + for (int i = 0; i < rows.size(); i++) { + java.util.Map row = rows.get(i); + if (row != null && "GNR".equals(row.get("USER_TYPE"))) { + MemberNmDecryptSupport.decryptInPlace(row, "MBER_NM"); + } + } + } } \ No newline at end of file diff --git a/src/main/java/kr/or/arko/mnt/biz/test/service/TestVO.java b/src/main/java/kr/or/arko/mnt/biz/test/service/TestVO.java index 63d3111..d2aca25 100644 --- a/src/main/java/kr/or/arko/mnt/biz/test/service/TestVO.java +++ b/src/main/java/kr/or/arko/mnt/biz/test/service/TestVO.java @@ -92,5 +92,18 @@ public class TestVO extends ComDefaultVO { public void setFrstRegisterNm(String frstRegisterNm) { this.frstRegisterNm = frstRegisterNm; } - + + /** + * frstRegisterNm(COMVNUSERMASTER.USER_NM) 출처 회원유형(GNR/USR/ENT/GRO, 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10). + */ + private String frstRegisterNmSe = ""; + + public String getFrstRegisterNmSe() { + return frstRegisterNmSe; + } + + public void setFrstRegisterNmSe(String frstRegisterNmSe) { + this.frstRegisterNmSe = frstRegisterNmSe; + } + } diff --git a/src/main/java/kr/or/arko/mnt/biz/test/service/impl/BizTestDAO.java b/src/main/java/kr/or/arko/mnt/biz/test/service/impl/BizTestDAO.java index 67e98a1..cf336ef 100644 --- a/src/main/java/kr/or/arko/mnt/biz/test/service/impl/BizTestDAO.java +++ b/src/main/java/kr/or/arko/mnt/biz/test/service/impl/BizTestDAO.java @@ -8,25 +8,61 @@ import kr.or.arko.mnt.biz.test.service.TestVO; import org.springframework.stereotype.Repository; +import egovframework.com.cmm.privacy.crypto.MemberDataHasher; +import egovframework.com.cmm.privacy.crypto.MemberNmDecryptSupport; import egovframework.com.cmm.service.impl.EgovComAbstractDAO; @Repository("BizTestDAO") public class BizTestDAO extends EgovComAbstractDAO { - + + /** + * 이름 검색 전환(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10) 헬퍼. + */ + private MemberDataHasher mberNmHasher; + + private void fillSearchKeywordHash(TestVO vo) { + String cond = vo.getSearchCondition(); + if (!"nm".equals(cond) && !"all".equals(cond)) { + return; + } + String kw = vo.getSearchKeyword(); + if (kw == null || kw.trim().length() == 0) { + return; + } + if (mberNmHasher == null) { + mberNmHasher = new MemberDataHasher(); + } + vo.setSearchKeywordHash(mberNmHasher.hashName(kw)); + } + + private void decryptIfGnr(TestVO vo) { + if (vo != null && "GNR".equals(vo.getFrstRegisterNmSe())) { + MemberNmDecryptSupport.decryptInPlace(vo, "frstRegisterNm"); + } + } + /** 리스트 조회 */ @SuppressWarnings("unchecked") public List selectTestList(TestVO testVO) throws Exception { - return list("BizTestDAO.selectTestList", testVO); + fillSearchKeywordHash(testVO); + List result = list("BizTestDAO.selectTestList", testVO); + for (TestVO row : result) { + decryptIfGnr(row); + } + return result; } /** 총 건수 조회 */ public int selectTestListTotCnt(TestVO testVO) throws Exception { + fillSearchKeywordHash(testVO); return (Integer)getSqlMapClientTemplate().queryForObject("BizTestDAO.selectTestListTotCnt", testVO); } /** 상세내용 조회 */ public TestVO selectTest(TestVO testVO) throws Exception { - return (TestVO)selectByPk("BizTestDAO.selectTest", testVO); + TestVO result = (TestVO)selectByPk("BizTestDAO.selectTest", testVO); + decryptIfGnr(result); + return result; } /** 등록 */ diff --git a/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBBSAddedOptions_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBBSAddedOptions_SQL_Mysql.xml index f4d2376..2f042f4 100644 --- a/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBBSAddedOptions_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBBSAddedOptions_SQL_Mysql.xml @@ -13,6 +13,8 @@ + + @@ -40,14 +42,15 @@ diff --git a/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBoard_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBoard_SQL_Mysql.xml index 0435ece..d39e266 100644 --- a/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBoard_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/cop/bbs/EgovBoard_SQL_Mysql.xml @@ -91,7 +91,8 @@ - + + @@ -245,7 +246,8 @@ - + + @@ -282,7 +284,8 @@ - + + @@ -466,6 +469,7 @@ + - + @@ -67,7 +69,7 @@ - + - + @@ -105,7 +107,7 @@ - + - + @@ -147,7 +149,7 @@ - + - + @@ -184,7 +186,7 @@ - + - + diff --git a/src/main/resources/egovframework/sqlmap/com/cop/scp/EgovBBSScrap_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/cop/scp/EgovBBSScrap_SQL_Mysql.xml index b26c9a3..0e15884 100644 --- a/src/main/resources/egovframework/sqlmap/com/cop/scp/EgovBBSScrap_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/cop/scp/EgovBBSScrap_SQL_Mysql.xml @@ -15,8 +15,9 @@ + - + @@ -26,6 +27,7 @@ + @@ -47,7 +49,7 @@ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.STSFDG_CN, a.STSFDG, a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S') as FRST_REGIST_PNTTM, - b.USER_NM as FRST_REGISTER_NM + b.USER_NM as FRST_REGISTER_NM, b.USER_SE FROM COMTNSTSFDG a LEFT OUTER JOIN COMVNUSERMASTER b @@ -105,7 +107,7 @@ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.STSFDG_CN, a.STSFDG, a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S') as FRST_REGIST_PNTTM, - b.USER_NM as FRST_REGISTER_NM + b.USER_NM as FRST_REGISTER_NM, b.USER_SE FROM COMTNSTSFDG a LEFT OUTER JOIN COMVNUSERMASTER b diff --git a/src/main/resources/egovframework/sqlmap/com/cop/tpl/EgovTemplate_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/cop/tpl/EgovTemplate_SQL_Mysql.xml index 6b3f3f7..a5d7151 100644 --- a/src/main/resources/egovframework/sqlmap/com/cop/tpl/EgovTemplate_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/cop/tpl/EgovTemplate_SQL_Mysql.xml @@ -30,6 +30,7 @@ + @@ -107,7 +108,7 @@ a.FRST_REGISTER_ID, a.FRST_REGIST_PNTTM, b.USER_NM AS FRST_REGISTER_NM, c.CODE_NM AS TMPLAT_SE_CODE_NM, a.LAST_UPDUSR_ID, - d.USER_NM AS LAST_UPDUSR_NM, a.LAST_UPDT_PNTTM + d.USER_NM AS LAST_UPDUSR_NM, a.LAST_UPDT_PNTTM, b.USER_SE AS FRST_REGISTER_NM_SE FROM COMTNTMPLATINFO a LEFT OUTER JOIN COMVNUSERMASTER b diff --git a/src/main/resources/egovframework/sqlmap/com/sec/rgm/EgovAuthorGroup_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sec/rgm/EgovAuthorGroup_SQL_Mysql.xml index bd4b73f..b99347a 100644 --- a/src/main/resources/egovframework/sqlmap/com/sec/rgm/EgovAuthorGroup_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sec/rgm/EgovAuthorGroup_SQL_Mysql.xml @@ -33,22 +33,22 @@ ELSE 'Y' END) AS REG_YN, ESNTL_ID - FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID + FROM (SELECT MBER_ID USER_ID, MBER_NM_ENC USER_NM, MBER_NM_HASH USER_NM_HASH, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID FROM COMTNGNRLMBER UNION ALL - SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID + SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, NULL USER_NM_HASH, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID FROM COMTNENTRPRSMBER UNION ALL - SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID + SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, NULL USER_NM_HASH, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID - WHERE 1 = 1 + WHERE 1 = 1 A.USER_ID LIKE CONCAT('%' , #searchKeyword#, '%') - A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%') + (A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')) A.GROUP_ID = #searchKeyword# @@ -88,22 +88,22 @@ SELECT COUNT(*) AS totcnt - FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE + FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, MBER_NM_HASH USER_NM_HASH, GROUP_ID, 'USR01' MBER_TY_CODE FROM COMTNGNRLMBER UNION ALL - SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE + SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, NULL USER_NM_HASH, GROUP_ID, 'USR02' MBER_TY_CODE FROM COMTNENTRPRSMBER UNION ALL - SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE + SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, NULL USER_NM_HASH, GROUP_ID, 'USR03' MBER_TY_CODE FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID - WHERE 1 = 1 + WHERE 1 = 1 A.USER_ID LIKE '%'||#searchKeyword#||'%' - A.USER_NM LIKE '%'||#searchKeyword#||'%' + (A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE '%'||#searchKeyword#||'%') A.GROUP_ID = #searchKeyword# diff --git a/src/main/resources/egovframework/sqlmap/com/sts/dst/EgovDtaUseStats_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sts/dst/EgovDtaUseStats_SQL_Mysql.xml index b7f2a8a..791d9f0 100644 --- a/src/main/resources/egovframework/sqlmap/com/sts/dst/EgovDtaUseStats_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sts/dst/EgovDtaUseStats_SQL_Mysql.xml @@ -30,6 +30,7 @@ + @@ -155,7 +156,8 @@ D.ORIGNL_FILE_NM, A.FRST_REGISTER_ID, E.USER_NM, - A.FRST_REGIST_PNTTM + A.FRST_REGIST_PNTTM, + E.USER_SE FROM COMTNDTAUSESTATS A, COMTNBBSMASTER B, COMTNBBS C, diff --git a/src/main/resources/egovframework/sqlmap/com/sym/log/clg/EgovLoginLog_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sym/log/clg/EgovLoginLog_SQL_Mysql.xml index 7a3c8dd..49e3695 100644 --- a/src/main/resources/egovframework/sqlmap/com/sym/log/clg/EgovLoginLog_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sym/log/clg/EgovLoginLog_SQL_Mysql.xml @@ -17,6 +17,7 @@ + @@ -96,11 +97,12 @@ , a.CONECT_IP , a.CONECT_ID , b.USER_NM AS LOGIN_NM + , b.USER_SE AS LOGIN_NM_SE FROM COMTNLOGINLOG a LEFT OUTER JOIN COMVNUSERMASTER b ON a.CONECT_ID = b.ESNTL_ID - WHERE + WHERE a.LOG_ID = #logId# ]]> @@ -115,11 +117,12 @@ , a.CONECT_IP , a.CONECT_ID , b.USER_NM AS LOGIN_NM + , b.USER_SE AS LOGIN_NM_SE FROM COMTNLOGINLOG a LEFT OUTER JOIN COMVNUSERMASTER b ON a.CONECT_ID = b.ESNTL_ID - WHERE + WHERE 1 = 1 ]]> diff --git a/src/main/resources/egovframework/sqlmap/com/sym/log/lgm/EgovSysLog_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sym/log/lgm/EgovSysLog_SQL_Mysql.xml index 3751a7a..f7d1388 100644 --- a/src/main/resources/egovframework/sqlmap/com/sym/log/lgm/EgovSysLog_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sym/log/lgm/EgovSysLog_SQL_Mysql.xml @@ -21,6 +21,7 @@ + @@ -61,6 +62,7 @@ , a.RQESTER_IP , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE FROM COMTNSYSLOG a LEFT OUTER JOIN COMVNUSERMASTER b @@ -88,6 +90,7 @@ , a.RQESTER_IP , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE FROM COMTNSYSLOG a LEFT OUTER JOIN COMVNUSERMASTER b diff --git a/src/main/resources/egovframework/sqlmap/com/sym/log/ulg/EgovUserLog_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sym/log/ulg/EgovUserLog_SQL_Mysql.xml index 3b24440..5183030 100644 --- a/src/main/resources/egovframework/sqlmap/com/sym/log/ulg/EgovUserLog_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sym/log/ulg/EgovUserLog_SQL_Mysql.xml @@ -11,8 +11,9 @@ - - + + + @@ -58,6 +59,7 @@ a.OCCRRNC_DE , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE , a.SVC_NM , a.METHOD_NM , a.CREAT_CO @@ -85,6 +87,7 @@ a.OCCRRNC_DE , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE , a.SVC_NM , a.METHOD_NM , a.CREAT_CO @@ -101,7 +104,7 @@ 1 = 1 ]]> - + @@ -122,7 +125,7 @@ 1 = 1 ]]> - + diff --git a/src/main/resources/egovframework/sqlmap/com/sym/log/wlg/EgovWebLog_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/sym/log/wlg/EgovWebLog_SQL_Mysql.xml index 8ad499e..cabbecd 100644 --- a/src/main/resources/egovframework/sqlmap/com/sym/log/wlg/EgovWebLog_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/sym/log/wlg/EgovWebLog_SQL_Mysql.xml @@ -14,8 +14,9 @@ - - + + + @@ -44,6 +45,7 @@ , a.RQESTER_IP , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE FROM COMTNWEBLOG a LEFT OUTER JOIN COMVNUSERMASTER b @@ -63,6 +65,7 @@ , a.RQESTER_IP , a.RQESTER_ID , b.USER_NM AS RQESTER_NM + , b.USER_SE AS RQESTER_NM_SE FROM COMTNWEBLOG a LEFT OUTER JOIN COMVNUSERMASTER b diff --git a/src/main/resources/egovframework/sqlmap/com/uat/uap/EgovLoginPolicy_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/uat/uap/EgovLoginPolicy_SQL_Mysql.xml index 0b0f60f..7f7d094 100644 --- a/src/main/resources/egovframework/sqlmap/com/uat/uap/EgovLoginPolicy_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/uat/uap/EgovLoginPolicy_SQL_Mysql.xml @@ -33,7 +33,7 @@ WHERE 1 = 1 - A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%') + (A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')) LIMIT #recordCountPerPage# OFFSET #firstIndex# @@ -47,7 +47,7 @@ WHERE 1 = 1 - A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%') + (A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')) @@ -68,7 +68,7 @@ SELECT ESNTL_ID, MBER_ID AS USER_ID, - MBER_NM AS USER_NM, + MBER_NM_ENC AS USER_NM, 'GNR' AS USER_SE FROM COMTNGNRLMBER WHERE MBER_ID = #emplyrId# diff --git a/src/main/resources/egovframework/sqlmap/com/uat/uia/EgovLoginUsr_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/com/uat/uia/EgovLoginUsr_SQL_Mysql.xml index 2e6c0d9..eb797f4 100644 --- a/src/main/resources/egovframework/sqlmap/com/uat/uia/EgovLoginUsr_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/com/uat/uia/EgovLoginUsr_SQL_Mysql.xml @@ -284,7 +284,7 @@ SELECT A.MBER_ID AS id , B.ESNTL_ID AS uniqId , B.MBER_EMAIL_ADRES AS email - , B.MBER_NM AS name + , B.MBER_NM_ENC AS name , IFNULL(A.LAST_LOG, B.SBSCRB_DE) AS creatDt , A.DIAPAUSE_DT AS diapause_dt , A.DIAPAUSE_STAT AS diapause_stat @@ -353,7 +353,7 @@ @@ -692,7 +692,7 @@ SELECT password AS password FROM COMTNGNRLMBER WHERE mber_id = #id# - AND mber_nm = #name# + AND mber_nm_hash = #nameHash# AND mber_email_adres = #email# AND password_hint = #passwordHint# AND password_cnsr = #passwordCnsr# @@ -736,7 +736,7 @@ , USER_NM AS name , USER_SE AS userSe FROM COMVNUSERMASTER - WHERE USER_NM = #name# + WHERE (USER_NM_HASH = #nameHash# OR USER_NM = #name#) ]]> @@ -762,7 +762,7 @@ , USER_NM AS name , USER_SE AS userSe FROM COMVNUSERMASTER - WHERE USER_NM = #name# + WHERE (USER_NM_HASH = #nameHash# OR USER_NM = #name#) ]]> @@ -815,7 +815,7 @@ @@ -139,7 +139,7 @@ - + @@ -153,7 +153,7 @@ a.MBER_ID ,a.LAST_LOG ,a.DIAPAUSE_DT - ,b.MBER_NM + ,b.MBER_NM_ENC AS MBER_NM ,b.SBSCRB_DE ,DATEDIFF(sysdate(), COALESCE(a.DIAPAUSE_DT, b.SBSCRB_DE)) AS ELAPSED_DT ,b.ESNTL_ID @@ -165,7 +165,7 @@ a.MBER_ID LIKE #searchKeyword# - b.MBER_NM LIKE CONCAT('%',#searchKeyword#,'%') + b.MBER_NM_HASH = #searchKeywordHash# + @@ -278,14 +281,15 @@ A.ESNTL_ID , A.MBER_ID AS USER_ID , A.MBER_NM AS USER_NM - , A.MBTLNUM + , A.MBTLNUM , A.RECV_SMS_YN + , A.USER_SE AS USER_SE FROM ( SELECT ESNTL_ID - , MBER_ID AS MBER_ID - , MBER_NM - , 'GNR' AS USER_SE + , MBER_ID AS MBER_ID + , MBER_NM_ENC AS MBER_NM + , 'GNR' AS USER_SE , MBTLNUM , RECV_SMS_YN FROM COMTNGNRLMBER diff --git a/src/main/resources/egovframework/sqlmap/site/frt/biz/note/BizNote_SQL_Oracle.xml b/src/main/resources/egovframework/sqlmap/site/frt/biz/note/BizNote_SQL_Oracle.xml index 1848748..9ea15d8 100644 --- a/src/main/resources/egovframework/sqlmap/site/frt/biz/note/BizNote_SQL_Oracle.xml +++ b/src/main/resources/egovframework/sqlmap/site/frt/biz/note/BizNote_SQL_Oracle.xml @@ -23,6 +23,8 @@ + + @@ -269,14 +271,15 @@ ESNTL_ID , MBER_ID AS USER_ID , MBER_NM AS USER_NM - , MBTLNUM + , MBTLNUM , RECV_SMS_YN + , USER_SE AS USER_SE FROM ( SELECT ESNTL_ID - , MBER_ID AS MBER_ID - , MBER_NM - , 'GNR' AS USER_SE + , MBER_ID AS MBER_ID + , MBER_NM_ENC AS MBER_NM + , 'GNR' AS USER_SE , MBTLNUM , RECV_SMS_YN FROM COMTNGNRLMBER diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/appconfirm/BizAppconfirm_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/appconfirm/BizAppconfirm_SQL_Mysql.xml index 77191b1..84857a2 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/appconfirm/BizAppconfirm_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/appconfirm/BizAppconfirm_SQL_Mysql.xml @@ -36,6 +36,10 @@ + + + + @@ -68,6 +72,9 @@ + + + @@ -331,6 +338,10 @@ (SELECT USER_NM FROM COMVNUSERMASTER WHERE ESNTL_ID = A.LAST_UPDUSR_ID LIMIT 1) AS AUTH_NM, A.APPROVAL_GUGUN_ID, A.APPROVAL_GUGUN_DATE, A.APPROVAL_GUGUN_YN, G.USER_NM APPROVAL_GUGUN_NM , D.WORK_AREA,A.DETAIL_YN + , C.USER_SE AS MBER_NM_SE + , CASE WHEN X.AUTH = 'G' THEN G.USER_SE ELSE X.USER_SE END AS USER_SE + , (SELECT USER_SE FROM COMVNUSERMASTER WHERE ESNTL_ID = A.LAST_UPDUSR_ID LIMIT 1) AS AUTH_NM_SE + , G.USER_SE AS APPROVAL_GUGUN_NM_SE FROM BIZ_ACTIVITY_CONFIRM A INNER JOIN COMVNUSERMASTER C ON A.MBER_ID = C.USER_ID INNER JOIN BIZ_VOLUNTEER D ON A.VOLUNTEER_ID = D.VOLUNTEER_ID @@ -373,6 +384,10 @@ (SELECT USER_NM FROM COMVNUSERMASTER WHERE ESNTL_ID = A.LAST_UPDUSR_ID LIMIT 1) AS AUTH_NM, A.APPROVAL_GUGUN_ID, A.APPROVAL_GUGUN_DATE, A.APPROVAL_GUGUN_YN, G.USER_NM APPROVAL_GUGUN_NM , D.WORK_AREA,A.DETAIL_YN + , C.USER_SE AS MBER_NM_SE + , CASE WHEN X.AUTH = 'G' THEN G.USER_SE ELSE X.USER_SE END AS USER_SE + , (SELECT USER_SE FROM COMVNUSERMASTER WHERE ESNTL_ID = A.LAST_UPDUSR_ID LIMIT 1) AS AUTH_NM_SE + , G.USER_SE AS APPROVAL_GUGUN_NM_SE FROM BIZ_ACTIVITY_CONFIRM A LEFT JOIN COMVNUSERMASTER C ON A.MBER_ID = C.USER_ID LEFT JOIN BIZ_VOLUNTEER D ON A.VOLUNTEER_ID = D.VOLUNTEER_ID @@ -459,7 +474,7 @@ @@ -474,7 +489,7 @@ @@ -549,7 +564,7 @@ @@ -564,7 +579,7 @@ @@ -680,6 +695,9 @@ , D.WORK_AREA , A.ACT_TYPE , A.MIDDLE_ACTIVITY_SEQ + , C.USER_SE AS MBER_NM_SE + , X.USER_SE AS USER_SE + , G.USER_SE AS APPROVAL_GUGUN_NM_SE FROM ( SELECT A.*, 'ACT' ACT_TYPE,'' MID_STATUS, '' VOLUNTEER_MID_SDATE,'' VOLUNTEER_MID_EDATE, '' VOLUNTEER_MID_SHOUR, '' VOLUNTEER_MID_SMIN, '' VOLUNTEER_MID_EHOUR, '' VOLUNTEER_MID_EMIN,'' MID_SUM, '' APPROVAL_MID_ID , DATE_FORMAT('', '%Y%m%d%H%i%s') APPROVAL_MID_DATE, DATE_FORMAT('', '%Y%m%d%H%i%s') REGIST_PNTTM, NULL MIDDLE_ACTIVITY_SEQ FROM BIZ_ACTIVITY_CONFIRM A @@ -762,7 +780,7 @@ @@ -772,12 +790,12 @@ @@ -787,7 +805,7 @@ @@ -877,7 +895,7 @@ @@ -887,12 +905,12 @@ @@ -902,7 +920,7 @@ @@ -1154,6 +1172,9 @@ ) AS AUTH_NM, A.APPROVAL_GUGUN_ID, A.APPROVAL_GUGUN_DATE, A.APPROVAL_GUGUN_YN, G.USER_NM APPROVAL_GUGUN_NM ,D.WORK_AREA, A.DETAIL_YN + , C.USER_SE AS MBER_NM_SE + , CASE WHEN X.AUTH = 'G' THEN G.USER_SE ELSE X.USER_SE END AS USER_SE + , G.USER_SE AS APPROVAL_GUGUN_NM_SE FROM BIZ_ACTIVITY_CONFIRM A INNER JOIN COMVNUSERMASTER C ON A.MBER_ID = C.USER_ID INNER JOIN BIZ_VOLUNTEER D ON A.VOLUNTEER_ID = D.VOLUNTEER_ID @@ -1208,7 +1229,7 @@ @@ -1223,7 +1244,7 @@ @@ -1265,6 +1286,7 @@ , A.VOLUNTEER_SEQ_ID appconfirmSeqId , A.MBER_ID mberId , (SELECT USER_NM FROM COMVNUSERMASTER WHERE USER_ID = A.MBER_ID) mberNm + , (SELECT USER_SE FROM COMVNUSERMASTER WHERE USER_ID = A.MBER_ID) mberNmSe , A.STATUS status , MID_SUM midSum , DATE_FORMAT(A.REGIST_PNTTM, '%Y.%m.%d') registDate diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Mysql.xml index 1cddc18..cec67ac 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Mysql.xml @@ -47,7 +47,8 @@ CONCAT('SEND_', (SELECT LPAD(MAX(SUBSTRING(ACTSEQ, 6))+1,15,0) FROM BIZ_CONN_SEND)) as act_seq, (SELECT sub.volunteer_title FROM BIZ_VOLUNTEER as sub WHERE sub.VOLUNTEER_ID = #volunteerId#) as volunteer_title, (SELECT DATE_FORMAT(sub.APPROVAL_DATE,'%Y%m%d') FROM BIZ_ACTIVITY_CONFIRM sub WHERE sub.volunteer_seq_id = #volunteerSeqId#) as approval_date, - (SELECT sub.user_nm FROM COMVNUSERMASTER sub WHERE T1.ESNTL_ID = sub.ESNTL_ID) user_nm, + (SELECT sub.user_nm FROM COMVNUSERMASTER sub WHERE T1.ESNTL_ID = sub.ESNTL_ID) user_nm, + (SELECT sub.USER_SE FROM COMVNUSERMASTER sub WHERE T1.ESNTL_ID = sub.ESNTL_ID) user_nm_se, CASE WHEN T1.WORK_AREA = 'A001' AND T1.FAC_CODE = 'A001' THEN '0702' @@ -272,6 +273,7 @@ ,C.VOLUNTEER_TITLE as data9 ,DATE_FORMAT(B.APPROVAL_DATE,'%Y%m%d') as data10 ,G.USER_NM as data11 + ,G.USER_SE as data11_se ,CASE WHEN C.WORK_AREA = 'A001' AND F.CODE = 'A001' THEN '0702' @@ -442,7 +444,7 @@ SELECT * FROM (SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( SELECT B.MBER_ID, - B.MBER_NM, + B.MBER_NM_ENC AS MBER_NM, A.CNSMRNAME, C.VOLUNTEER_ID, C.VOLUNTEER_TITLE, @@ -545,7 +547,7 @@ @@ -555,7 +557,7 @@ @@ -692,7 +694,7 @@ @@ -702,7 +704,7 @@ diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Oracle.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Oracle.xml index a2e4eb0..a85904c 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Oracle.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/cntc/Cntc_SQL_Oracle.xml @@ -220,7 +220,7 @@ SELECT * FROM (SELECT ROWNUM AS rn, TB.* FROM ( SELECT B.MBER_ID, - B.MBER_NM, + B.MBER_NM_ENC AS MBER_NM, A.CNSMRNAME, C.VOLUNTEER_ID, C.VOLUNTEER_TITLE, @@ -317,7 +317,7 @@ @@ -327,7 +327,7 @@ @@ -451,7 +451,7 @@ @@ -461,7 +461,7 @@ diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/event/BizAwardMnt_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/event/BizAwardMnt_SQL_Mysql.xml index d19a58e..f03482f 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/event/BizAwardMnt_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/event/BizAwardMnt_SQL_Mysql.xml @@ -120,6 +120,8 @@ + + @@ -2206,6 +2208,7 @@ , B.LAST_UPDT_PNTTM , B.LAST_UPDUSR_ID , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS USER_SE , Z.ATCH_FILE_ID , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN @@ -2221,19 +2224,19 @@ ON A.BBS_ID = B.BBS_ID AND B.BBS_CL_CD = '06' LEFT OUTER JOIN (SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM AS USER_NM FROM COMTNGNRLMBER WHERE MBER_STTUS = 'P') B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM_ENC AS USER_NM, 'GNR' AS USER_SE FROM COMTNGNRLMBER WHERE MBER_STTUS = 'P') B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, USER_NM AS USER_NM FROM COMTNEMPLYRINFO ) B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, USER_NM AS USER_NM, 'USR' AS USER_SE FROM COMTNEMPLYRINFO ) B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, CMPNY_NM AS CMPNY_NM FROM COMTNENTRPRSMBER WHERE ENTRPRS_MBER_STTUS = 'P') B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, CMPNY_NM AS CMPNY_NM, 'ENT' AS USER_SE FROM COMTNENTRPRSMBER WHERE ENTRPRS_MBER_STTUS = 'P') B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, GROUP_NM AS GROUP_NM FROM BIZ_GROUP WHERE GROUP_STTUS_CODE <> 'C' ) B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, GROUP_NM AS GROUP_NM, 'GRO' AS USER_SE FROM BIZ_GROUP WHERE GROUP_STTUS_CODE <> 'C' ) B ON A.FRST_REGISTER_ID = B.ESNTL_ID ) X ON A.FRST_REGISTER_ID = X.ESNTL_ID @@ -2523,6 +2526,7 @@ , B.LAST_UPDT_PNTTM , B.LAST_UPDUSR_ID , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS USER_SE , Z.ATCH_FILE_ID , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN @@ -2537,19 +2541,19 @@ ON A.BBS_ID = B.BBS_ID AND B.BBS_CL_CD = '06' LEFT OUTER JOIN (SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM AS USER_NM FROM COMTNGNRLMBER WHERE MBER_STTUS = 'P') B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM_ENC AS USER_NM, 'GNR' AS USER_SE FROM COMTNGNRLMBER WHERE MBER_STTUS = 'P') B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, USER_NM AS USER_NM FROM COMTNEMPLYRINFO ) B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, USER_NM AS USER_NM, 'USR' AS USER_SE FROM COMTNEMPLYRINFO ) B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, CMPNY_NM AS CMPNY_NM FROM COMTNENTRPRSMBER WHERE ENTRPRS_MBER_STTUS = 'P') B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, CMPNY_NM AS CMPNY_NM, 'ENT' AS USER_SE FROM COMTNENTRPRSMBER WHERE ENTRPRS_MBER_STTUS = 'P') B ON A.FRST_REGISTER_ID = B.ESNTL_ID UNION SELECT B.* FROM BIZ_EVENT A - INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, GROUP_NM AS GROUP_NM FROM BIZ_GROUP WHERE GROUP_STTUS_CODE <> 'C' ) B + INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, GROUP_NM AS GROUP_NM, 'GRO' AS USER_SE FROM BIZ_GROUP WHERE GROUP_STTUS_CODE <> 'C' ) B ON A.FRST_REGISTER_ID = B.ESNTL_ID ) X ON A.FRST_REGISTER_ID = X.ESNTL_ID diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/group/BizGroup_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/group/BizGroup_SQL_Mysql.xml index 9df72ae..0a27c88 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/group/BizGroup_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/group/BizGroup_SQL_Mysql.xml @@ -20,6 +20,7 @@ + @@ -47,6 +48,7 @@ , B.CODE_NM AS CTGRY_NM , C.CODE_NM AS SRVC_NM , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS FRST_REGISTER_NM_SE , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN , Z.FILE_SIZE @@ -71,7 +73,7 @@ @@ -105,7 +107,7 @@ @@ -130,6 +132,7 @@ , B.CODE_NM AS CTGRY_NM , C.CODE_NM AS SRVC_NM , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS FRST_REGISTER_NM_SE , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN , Z.FILE_SIZE diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Mysql.xml index 1a36fcd..ef4114e 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Mysql.xml @@ -54,7 +54,7 @@ , h.RESET_YN AS resetYn , CASE h.GUBUN WHEN 'USR' THEN (SELECT e.USER_NM FROM COMTNEMPLYRINFO e WHERE e.EMPLYR_ID = h.ID) - WHEN 'GNR' THEN (SELECT g.MBER_NM FROM COMTNGNRLMBER g WHERE g.MBER_ID = h.ID) + WHEN 'GNR' THEN (SELECT g.MBER_NM_ENC FROM COMTNGNRLMBER g WHERE g.MBER_ID = h.ID) ELSE NULL END AS userNm FROM LOGIN_HISTORY h diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Oracle.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Oracle.xml index 4d48499..6322c5c 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Oracle.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/privacy/PrivacyLoginFailHistory_SQL_Oracle.xml @@ -48,7 +48,7 @@ , h.RESET_YN AS resetYn , CASE h.GUBUN WHEN 'USR' THEN (SELECT e.USER_NM FROM COMTNEMPLYRINFO e WHERE e.EMPLYR_ID = h.ID) - WHEN 'GNR' THEN (SELECT g.MBER_NM FROM COMTNGNRLMBER g WHERE g.MBER_ID = h.ID) + WHEN 'GNR' THEN (SELECT g.MBER_NM_ENC FROM COMTNGNRLMBER g WHERE g.MBER_ID = h.ID) ELSE NULL END AS userNm FROM LOGIN_HISTORY h diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/prmvp/BizPrmvp_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/prmvp/BizPrmvp_SQL_Mysql.xml index 1cabe83..2de77a6 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/prmvp/BizPrmvp_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/prmvp/BizPrmvp_SQL_Mysql.xml @@ -29,6 +29,7 @@ + - + @@ -40,6 +41,7 @@ , B.CODE_NM AS CTGRY_NM , C.CODE_NM AS GUBUN_NM , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS FRST_REGISTER_NM_SE , Z.ATCH_FILE_ID , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN @@ -65,12 +67,12 @@ @@ -104,12 +106,12 @@ @@ -130,6 +132,7 @@ , B.CODE_NM AS CTGRY_NM , C.CODE_NM AS GUBUN_NM , X.USER_NM AS FRST_REGISTER_NM + , X.USER_SE AS FRST_REGISTER_NM_SE , Z.ATCH_FILE_ID , Z.ORIGNL_FILE_NM , Z.FILE_EXTSN diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/stat/BizStat_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/stat/BizStat_SQL_Mysql.xml index 7623c9e..c3762ec 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/stat/BizStat_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/stat/BizStat_SQL_Mysql.xml @@ -5018,6 +5018,7 @@ GROUP BY YYYY bss.SUMMARY_SEQ_ID AS summarySeqId, bss.AGGREGATOR_ID AS aggregatorId, m.USER_NM AS aggregatorNm, + m.USER_SE AS aggregatorNmSe, DATE_FORMAT(bss.AGGREGATION_DATE, '%Y-%m-%d %H:%i:%s') AS aggregationDate, bss.START_DATE AS startDate, bss.END_DATE AS endDate, @@ -5458,6 +5459,7 @@ GROUP BY YYYY SELECT A.MBER_ID AS mberId, C.USER_NM AS mberNm, + C.USER_SE AS mberNmSe, D.VOLUNTEER_TITLE AS volunteerTitle, CASE ACT_TYPE WHEN 'MID' THEN A.VOLUNTEER_MID_SDATE @@ -5484,6 +5486,7 @@ GROUP BY YYYY ELSE A.APPROVAL_DATE END approvalDate, X.USER_NM AS esntlNm, + X.USER_SE AS esntlNmSe, CASE A.ACT_TYPE WHEN 'MID' THEN A.APPROVAL_MID_DATE ELSE A.APPROVAL_GUGUN_DATE diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/talent/BizTalent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/talent/BizTalent_SQL_Mysql.xml index 966cb67..205972a 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/talent/BizTalent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/talent/BizTalent_SQL_Mysql.xml @@ -28,7 +28,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( SELECT b.ESNTL_ID as UNIQ_ID , a.PHOTO_FILE_ID , a.USER_ID - , b.MBER_NM + , b.MBER_NM_ENC as MBER_NM , a.CAREER , a.SKILL , d.CODE_NM as WORK_MAJOR_AREA1 @@ -50,7 +50,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( a.USER_ID LIKE #searchKeyword# - b.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') + b.MBER_NM_HASH = #searchKeywordHash# b.ACTIVE_SIDO_AREA1 = #searchCondition1# @@ -92,7 +92,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( a.USER_ID LIKE #searchKeyword# - b.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') + b.MBER_NM_HASH = #searchKeywordHash# b.ACTIVE_SIDO_AREA1 = #searchCondition1# @@ -124,7 +124,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( a.ESNTL_ID uniqId, 'USR01' userTy, a.MBER_ID mberId, - a.MBER_NM mberNm, + a.MBER_NM_ENC mberNm, a.PASSWORD password, a.IHIDNUM ihidnum, a.SEXDSTN_CODE sexdstnCode, @@ -182,7 +182,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( a.ESNTL_ID uniqId ,'USR01' userTy ,a.MBER_ID mberId - ,a.MBER_NM mberNm + ,a.MBER_NM_ENC mberNm ,a.PASSWORD password ,a.IHIDNUM ihidnum ,a.SEXDSTN_CODE sexdstnCode @@ -239,7 +239,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( SELECT b.ESNTL_ID as UNIQ_ID , a.PHOTO_FILE_ID , a.USER_ID - , b.MBER_NM + , b.MBER_NM_ENC as MBER_NM , a.CAREER , a.SKILL , d.CODE_NM as WORK_MAJOR_AREA1 @@ -260,7 +260,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( a.USER_ID LIKE #searchKeyword# - b.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') + b.MBER_NM_HASH = #searchKeywordHash# b.ACTIVE_SIDO_AREA1 = #searchCondition1# @@ -291,7 +291,7 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( /* talentMberManageDAO.selectJoinTalentMberList */ = 19 THEN 'A' WHEN FLOOR((CAST(DATE_FORMAT(SYSDATE(), '%Y%m%d') AS UNSIGNED) - CAST(CONCAT(BIRTH_YEAR, BIRTH_MONTH, BIRTH_DAY) AS UNSIGNED)) / 10000) < 19 THEN 'Y' ELSE 'N' END as ADULT_CHK FROM BIZ_TALENT A INNER JOIN COMTNGNRLMBER B ON A.USER_ID = B.MBER_ID - WHERE B.PUBLIC_YN = 'Y' - + WHERE B.PUBLIC_YN = 'Y' + UNION ALL - + SELECT 'GRO' as USER_TYPE, B.ESNTL_ID as UNIQ_ID, A.GROUP_ID, A.PHOTO_FILE_ID, A.SKILL as SKILL, A.CAREER as CAREER, LEFT(A.INTRODUCITION, 1500) as INTRODUCITION, PUBLIC_YN ,B.ACTIVE_SIDO_AREA as ACTIVE_SIDO_AREA1, B.ACTIVE_GUGUN_AREA as ACTIVE_GUGUN_AREA1, WORK_AREA as WORK_AREA1, WORK_MAJOR_AREA as WORK_MAJOR_AREA1, WORK_MINOR_AREA as WORK_MINOR_AREA1 - ,B.GROUP_NM as MBER_NM, B.SBSCRB_DE + ,B.GROUP_NM as MBER_NM, NULL as MBER_NM_HASH, B.SBSCRB_DE ,CASE WHEN B.GROUP_STTUS_CODE = 'A' THEN 'P' ELSE 'D' END @@ -337,10 +337,10 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( USER_ID LIKE CONCAT('%', #searchKeyword#, '%') - MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') + (MBER_NM_HASH = #searchKeywordHash# OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')) - (USER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')) + (USER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR MBER_NM_HASH = #searchKeywordHash# OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')) @@ -392,21 +392,21 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( FROM ( SELECT 'GNR' as USER_TYPE, B.ESNTL_ID as UNIQ_ID, A.USER_ID, A.PHOTO_FILE_ID, A.SKILL as SKILL, A.CAREER as CAREER, LEFT(A.INTRODUCITION, 1500) as INTRODUCITION, PUBLIC_YN ,B.ACTIVE_SIDO_AREA1, B.ACTIVE_GUGUN_AREA1, WORK_AREA1, WORK_MAJOR_AREA1, WORK_MINOR_AREA1 - ,B.MBER_NM as MBER_NM, B.SBSCRB_DE, B.MBER_STTUS - ,CASE + ,B.MBER_NM_ENC as MBER_NM, B.MBER_NM_HASH as MBER_NM_HASH, B.SBSCRB_DE, B.MBER_STTUS + ,CASE WHEN FLOOR((CAST(DATE_FORMAT(SYSDATE(), '%Y%m%d') AS UNSIGNED) - CAST(CONCAT(BIRTH_YEAR, BIRTH_MONTH, BIRTH_DAY) AS UNSIGNED)) / 10000) >= 19 THEN 'A' WHEN FLOOR((CAST(DATE_FORMAT(SYSDATE(), '%Y%m%d') AS UNSIGNED) - CAST(CONCAT(BIRTH_YEAR, BIRTH_MONTH, BIRTH_DAY) AS UNSIGNED)) / 10000) < 19 THEN 'Y' ELSE 'N' END as ADULT_CHK FROM BIZ_TALENT A INNER JOIN COMTNGNRLMBER B ON A.USER_ID = B.MBER_ID - WHERE B.PUBLIC_YN = 'Y' - + WHERE B.PUBLIC_YN = 'Y' + UNION - + SELECT 'GRO' as USER_TYPE, B.ESNTL_ID as UNIQ_ID, A.GROUP_ID, A.PHOTO_FILE_ID, A.SKILL as SKILL, A.CAREER as CAREER, LEFT(A.INTRODUCITION, 1500) as INTRODUCITION, PUBLIC_YN ,B.ACTIVE_SIDO_AREA as ACTIVE_SIDO_AREA1, B.ACTIVE_GUGUN_AREA as ACTIVE_GUGUN_AREA1, WORK_AREA as WORK_AREA1, WORK_MAJOR_AREA as WORK_MAJOR_AREA1, WORK_MINOR_AREA as WORK_MINOR_AREA1 - ,B.GROUP_NM as MBER_NM, B.SBSCRB_DE + ,B.GROUP_NM as MBER_NM, NULL as MBER_NM_HASH, B.SBSCRB_DE ,CASE WHEN B.GROUP_STTUS_CODE = 'A' THEN 'P' ELSE 'D' END @@ -427,10 +427,10 @@ SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM ( USER_ID LIKE CONCAT('%', #searchKeyword#, '%') - MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') + (MBER_NM_HASH = #searchKeywordHash# OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')) - (USER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%') ) + (USER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR MBER_NM_HASH = #searchKeywordHash# OR MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')) diff --git a/src/main/resources/egovframework/sqlmap/site/mnt/biz/test/BizTest_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/site/mnt/biz/test/BizTest_SQL_Mysql.xml index 0722476..7342aab 100644 --- a/src/main/resources/egovframework/sqlmap/site/mnt/biz/test/BizTest_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/site/mnt/biz/test/BizTest_SQL_Mysql.xml @@ -15,8 +15,9 @@ + - +