개인정보보호 기능개선 4차 — 회원정보 암호화 읽기전환/검색전환 완료(뷰 재정의 대비)

일반회원 이름(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 <noreply@anthropic.com>
This commit is contained in:
infraurp 2026-08-11 08:50:04 +09:00
parent e35aa9db06
commit 545b49daf7
110 changed files with 2246 additions and 450 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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;
/**
* 조회 결과에 담긴 이름 암호문을 평문으로 되돌려 <b>기존 코드가 쓰던 키·필드 이름을 그대로</b>
* 채운다. arko의 조회 SQL은 대부분 {@code resultClass="egovMap"}(Map)이고 일부는 VO다 —
* 이 클래스가 두 형태를 모두 처리해 DAO마다 다른 복호화 코드를 두지 않게 한다.
*
* <p><b>사용 패턴:</b> SQL의 {@code MBER_NM as "userNm"}을 {@code MBER_NM_ENC as "userNm"}으로
* 바꾼 뒤(별칭은 그대로 유지), DAO 메서드가 결과를 반환하기 직전에
* {@code MemberNmDecryptSupport.decryptListInPlace(rows, "userNm")}를 호출한다.
* 같은 키를 입력이자 출력으로 써서 호출부가 한 줄만 늘어나고, 화면·서비스 코드는 전혀
* 건드리지 않는다 — 그 키에 이제 평문이 들어있다는 사실만 달라진다.</p>
*
* <p><b>실패 처리:</b> 복호화에 실패하면 예외를 던진다(평문 대체나 빈 값 대체를 하지 않는다).
* 개인정보 조회 화면이 복호화 실패를 숨기고 빈 이름을 보여주면, "왜 이름이 안 보이지"라는
* 장애가 "키가 바뀌었다/암호문이 깨졌다"는 진짜 원인을 감춘다.</p>
*/
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<String, Object> m = (Map<String, Object>) row;
m.put(key, plain);
} else {
PropertyUtils.setProperty(row, key, plain);
}
} catch (Exception e) {
throw new IllegalStateException(
"[개인정보/암호화] 이름 복호화 실패(key=" + key + ", rowType="
+ row.getClass().getName() + ")", e);
}
}
}

View File

@ -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<LoginFailHistoryVO> selectLoginFailHistoryList(LoginFailHistoryVO vo) {
return list("LoginFailHistoryDAO.selectLoginFailHistoryList", vo);
List<LoginFailHistoryVO> 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;
}
/** 인증 실패 이력 전체 건수(페이징) */

View File

@ -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<CntcSendVO> selectSendData(){
return list("CntcDAO.selectSendData", "");
@ -56,10 +78,14 @@ public class CntcDAO extends EgovComAbstractDAO{
}
public List<CntcListVO> selectCntcList(CntcListVO clistvo){
return list("CntcDAO.selectCntcList", clistvo);
fillSearchKeywordHash(clistvo);
List<CntcListVO> 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<Object, String> selectInDataSendData(Map<String, String> cntcMap) {
return (Map<Object, String>)getSqlMapClientTemplate().queryForObject("CntcDAO.selectInDataSendData", cntcMap);
Map<Object, String> result = (Map<Object, String>)getSqlMapClientTemplate().queryForObject("CntcDAO.selectInDataSendData", cntcMap);
if (result != null && "GNR".equals(result.get("data11_se"))) {
MemberNmDecryptSupport.decryptInPlace(result, "data11");
}
return result;
}
public HashMap<String, String> selectNewInDataSendData(HashMap<String, String> param) {
return (HashMap<String, String>)getSqlMapClientTemplate().queryForObject("CntcDAO.selectNewInDataSendData", param);
HashMap<String, String> result = (HashMap<String, String>)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<String, String> param) {

View File

@ -38,6 +38,20 @@ 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 = "";

View File

@ -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를 리턴한다.
*

View File

@ -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를 리턴한다.
*

View File

@ -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

View File

@ -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

View File

@ -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;
}
/**

View File

@ -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);
}

View File

@ -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<BoardVO> selectBoardArticleList(BoardVO boardVO) throws Exception {
return list("BBSManageDAO.selectBoardArticleList", boardVO);
fillSearchKeywordHash(boardVO);
List<BoardVO> result = list("BBSManageDAO.selectBoardArticleList", boardVO);
for (BoardVO row : result) {
decryptFrstRegisterNmIfGnr(row);
}
return result;
}
@SuppressWarnings("unchecked")
public List<BoardVO> selectBoardArticleTopList(BoardVO boardVO) throws Exception {
return list("BBSManageDAO.selectBoardArticleTopList", boardVO);
fillSearchKeywordHash(boardVO);
List<BoardVO> 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<BoardVO> selectGuestList(BoardVO boardVO) throws Exception {
return list("BBSManageDAO.selectGuestList", boardVO);
List<BoardVO> 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<BoardVO> selectBoardReplyArticleList(BoardVO boardVO) throws Exception {
return list("BBSManageDAO.selectBoardReplyArticleList", boardVO);
List<BoardVO> result = list("BBSManageDAO.selectBoardReplyArticleList", boardVO);
for (BoardVO row : result) {
decryptFrstRegisterNmIfGnr(row);
}
return result;
}
/**

View File

@ -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<BoardUseInfVO> selectBBSUseInfsByTrget(BoardUseInfVO bdUseVO) throws Exception {
return list("BBSUseInfoManageDAO.selectBBSUseInfsByTrget", bdUseVO);
fillSearchKeywordHash(bdUseVO);
List<BoardUseInfVO> 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);
}

View File

@ -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<CommentVO> 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<CommentVO> selectCommentList(CommentVO commentVO) throws Exception {
return list("BBSCommentDAO.selectCommentList", commentVO);
List<CommentVO> result = list("BBSCommentDAO.selectCommentList", commentVO);
decryptGnrRowsInPlace(result);
return result;
}
/**

View File

@ -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를 리턴한다.
*

View File

@ -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,6 +28,36 @@ 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<UserInfVO> rows) {
if (rows == null) {
return;
}
for (UserInfVO row : rows) {
if (row != null && "GNR".equals(row.getUserNmSe())) {
MemberNmDecryptSupport.decryptInPlace(row, "userNm");
}
}
}
/**
* 사용자 정보에 대한 목록을 조회한다.
*
@ -35,7 +67,10 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<UserInfVO> selectUserList(UserInfVO userVO) throws Exception {
return list("EgovUserInfManageDAO.selectUserList", userVO);
fillSearchKeywordHash(userVO);
List<UserInfVO> result = list("EgovUserInfManageDAO.selectUserList", userVO);
decryptListIfGnr(result);
return result;
}
/**
@ -46,6 +81,7 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectUserListCnt(UserInfVO userVO) throws Exception {
fillSearchKeywordHash(userVO);
return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectUserListCnt", userVO);
}
@ -58,7 +94,10 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<UserInfVO> selectCmmntyUserList(UserInfVO userVO) throws Exception {
return list("EgovUserInfManageDAO.selectCmmntyUserList", userVO);
fillSearchKeywordHash(userVO);
List<UserInfVO> result = list("EgovUserInfManageDAO.selectCmmntyUserList", userVO);
decryptListIfGnr(result);
return result;
}
/**
@ -69,6 +108,7 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectCmmntyUserListCnt(UserInfVO userVO) throws Exception {
fillSearchKeywordHash(userVO);
return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectCmmntyUserListCnt", userVO);
}
@ -81,7 +121,10 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<UserInfVO> selectCmmntyMngrList(UserInfVO userVO) throws Exception {
return list("EgovUserInfManageDAO.selectCmmntyMngrList", userVO);
fillSearchKeywordHash(userVO);
List<UserInfVO> result = list("EgovUserInfManageDAO.selectCmmntyMngrList", userVO);
decryptListIfGnr(result);
return result;
}
/**
@ -92,6 +135,7 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectCmmntyMngrListCnt(UserInfVO userVO) throws Exception {
fillSearchKeywordHash(userVO);
return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectCmmntyMngrListCnt", userVO);
}
@ -104,7 +148,10 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<UserInfVO> selectClubUserList(UserInfVO userVO) throws Exception {
return list("EgovUserInfManageDAO.selectClubUserList", userVO);
fillSearchKeywordHash(userVO);
List<UserInfVO> result = list("EgovUserInfManageDAO.selectClubUserList", userVO);
decryptListIfGnr(result);
return result;
}
/**
@ -115,6 +162,7 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectClubUserListCnt(UserInfVO userVO) throws Exception {
fillSearchKeywordHash(userVO);
return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectClubUserListCnt", userVO);
}
@ -127,7 +175,10 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<UserInfVO> selectClubOprtrList(UserInfVO userVO) throws Exception {
return list("EgovUserInfManageDAO.selectClubOprtrList", userVO);
fillSearchKeywordHash(userVO);
List<UserInfVO> result = list("EgovUserInfManageDAO.selectClubOprtrList", userVO);
decryptListIfGnr(result);
return result;
}
/**
@ -138,6 +189,7 @@ public class EgovUserInfManageDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectClubOprtrListCnt(UserInfVO userVO) throws Exception {
fillSearchKeywordHash(userVO);
return (Integer)getSqlMapClientTemplate().queryForObject("EgovUserInfManageDAO.selectClubOprtrListCnt", userVO);
}

View File

@ -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<ScrapVO> selectScrapList(ScrapVO scrapVO) throws Exception {
return list("BBSScrapDAO.selectScrapList", scrapVO);
List<ScrapVO> 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;
}
/**

View File

@ -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

View File

@ -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;
}
/**

View File

@ -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<SatisfactionVO> selectSatisfactionList(SatisfactionVO satisfactionVO) throws Exception {
return list("BBSSatisfactionDAO.selectSatisfactionList", satisfactionVO);
List<SatisfactionVO> 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;
}
/**

View File

@ -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를 리턴한다.
*

View File

@ -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;
}
/**

View File

@ -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<AuthorGroupVO> 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<AuthorGroupVO> selectAuthorGroupList(AuthorGroupVO authorGroupVO) throws Exception {
return list("authorGroupDAO.selectAuthorGroupList", authorGroupVO);
fillSearchKeywordHash(authorGroupVO);
List<AuthorGroupVO> 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);
}

View File

@ -319,5 +319,18 @@ public class LoginLog implements Serializable {
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;
}
}

View File

@ -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;
@ -90,7 +91,11 @@ public class LoginLogDAO extends EgovComAbstractDAO {
*/
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;
}
/**
@ -100,8 +105,15 @@ public class LoginLogDAO extends EgovComAbstractDAO {
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List selectLoginLogInf(LoginLog loginLog) throws Exception{
return list("LoginLogDAO.selectLoginLogInf", loginLog);
List<LoginLog> result = list("LoginLogDAO.selectLoginLogInf", loginLog);
for (LoginLog row : result) {
if ("GNR".equals(row.getLoginNmSe())) {
MemberNmDecryptSupport.decryptInPlace(row, "loginNm");
}
}
return result;
}
/**

View File

@ -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
*/

View File

@ -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;
@ -58,7 +59,11 @@ public class SysLogDAO extends EgovComAbstractDAO {
*/
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;
}
/**
@ -68,8 +73,15 @@ public class SysLogDAO extends EgovComAbstractDAO {
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List selectSysLogInf(SysLog sysLog) throws Exception{
return list("SysLogDAO.selectSysLogInf", sysLog);
List<SysLog> result = list("SysLogDAO.selectSysLogInf", sysLog);
for (SysLog row : result) {
if ("GNR".equals(row.getRqsterNmSe())) {
MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm");
}
}
return result;
}
/**

View File

@ -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;
}

View File

@ -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,6 +28,25 @@ 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));
}
/**
* 사용자 로그정보를 생성한다.
*
@ -46,7 +67,11 @@ public class UserLogDAO extends EgovComAbstractDAO {
*/
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;
}
/**
@ -56,8 +81,16 @@ public class UserLogDAO extends EgovComAbstractDAO {
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List selectUserLogInf(UserLog userLog) throws Exception{
return list("UserLogDAO.selectUserLogInf", userLog);
fillSearchKeywordHash(userLog);
List<UserLog> result = list("UserLogDAO.selectUserLogInf", userLog);
for (UserLog row : result) {
if ("GNR".equals(row.getRqsterNmSe())) {
MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm");
}
}
return result;
}
/**
@ -67,7 +100,7 @@ public class UserLogDAO extends EgovComAbstractDAO {
* @throws Exception
*/
public int selectUserLogInfCnt(UserLog userLog) throws Exception{
fillSearchKeywordHash(userLog);
return (Integer)getSqlMapClientTemplate().queryForObject("UserLogDAO.selectUserLogInfCnt", userLog);
}

View File

@ -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;
}

View File

@ -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;
@ -58,7 +59,11 @@ public class WebLogDAO extends EgovComAbstractDAO {
*/
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;
}
/**
@ -68,8 +73,15 @@ public class WebLogDAO extends EgovComAbstractDAO {
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List selectWebLogInf(WebLog webLog) throws Exception{
return list("WebLogDAO.selectWebLogInf", webLog);
List<WebLog> result = list("WebLogDAO.selectWebLogInf", webLog);
for (WebLog row : result) {
if ("GNR".equals(row.getRqsterNmSe())) {
MemberNmDecryptSupport.decryptInPlace(row, "rqsterNm");
}
}
return result;
}
/**

View File

@ -16,6 +16,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.uat.uap.service.LoginPolicy;
import egovframework.com.uat.uap.service.LoginPolicyVO;
@ -23,6 +25,25 @@ 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<LoginPolicyVO> selectLoginPolicyList(LoginPolicyVO loginPolicyVO) throws Exception {
return list("loginPolicyDAO.selectLoginPolicyList", loginPolicyVO);
fillSearchKeywordHash(loginPolicyVO);
List<LoginPolicyVO> 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;
}
/**

View File

@ -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;
/**
@ -32,6 +34,63 @@ 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}을 복호화한다.
*
* <p>ENT/USR/GRO 분기는 각자 다른 테이블의 평문 이름을 그대로 {@code name}에 담으므로
* 복호화 대상이 아니다 — {@code userSe=="GNR"}일 때만 호출한다(안 그러면 평문에
* 복호화를 시도해 예외가 난다).</p>
*/
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<LoginVO> searchFrtIdList(LoginVO vo) throws Exception {
return list("loginDAO.searchFrtIdList", vo);
fillSearchNameHash(vo);
List<LoginVO> 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<LoginVO> selectDiapauseList(LoginVO loginVO) {
return list("loginDAO.selectDiapauseList", loginVO);
List<LoginVO> 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;
}

View File

@ -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;
/**
@ -27,6 +31,25 @@ 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));
}
/**
* 설문템플릿을 조회한다.
@ -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<Map> 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);
}

View File

@ -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<Map> 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;
}
/**

View File

@ -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);
}
@ -29,13 +53,40 @@ public class DiapauseManageDAO extends EgovComAbstractDAO{
// KTH. 20190603
@SuppressWarnings("unchecked")
public List selectUserLockCheckList(UserDefaultVO userSearchVO) {
return list("diapauseManageDAO.selectUserLockCheckList", userSearchVO);
fillUserLockSearchKeywordHash(userSearchVO);
List<DiapauseManageVO> 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);

View File

@ -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<MberManageVO> selectTopExcelMberList(UserDefaultVO userSearchVO) {
return list("mberManageDAO.selectTopExcelMberList", userSearchVO);
List<MberManageVO> result = list("mberManageDAO.selectTopExcelMberList", userSearchVO);
MemberNmDecryptSupport.decryptListInPlace(result, "mber_nm");
return result;
}
public List<GroupManageVO> selectTopExcelGroupList(UserDefaultVO userSearchVO) {
return list("mberManageDAO.selectTopExcelGroupList", userSearchVO);

View File

@ -8,11 +8,33 @@ 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<MemberVO> selectSingleList(MemberVO memberVO) throws Exception {
@ -22,7 +44,14 @@ public class BizMemberDAO extends EgovComAbstractDAO {
/** 회원마스터 리스트 조회 */
@SuppressWarnings("unchecked")
public List<MemberVO> selectUsrMasterSingleList(MemberVO memberVO) throws Exception {
return list("BizMemberDAO.selectUsrMasterSingleList", memberVO);
fillSearchKeywordHash(memberVO);
List<MemberVO> result = list("BizMemberDAO.selectUsrMasterSingleList", memberVO);
for (MemberVO row : result) {
if (row != null && "GNR".equals(row.getmberSttus())) {
MemberNmDecryptSupport.decryptInPlace(row, "mberNm");
}
}
return result;
}
/** 개인회원 총 건수 조회 */

View File

@ -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;
}
/** 그룹쪽지 등록 */

View File

@ -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;
}

View File

@ -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<AppconfirmVO> selectAppconfirmRegistList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.selectAppconfirmRegistList", appconfirmVO);
List<AppconfirmVO> result = list("BizAppconfirmDAO.selectAppconfirmRegistList", appconfirmVO);
for (AppconfirmVO row : result) {
decryptAppconfirmRow(row);
}
return result;
}
/** 활동확인 리스트 조회 */
@SuppressWarnings("unchecked")
public List<AppconfirmVO> selectAppconfirmList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.selectAppconfirmList", appconfirmVO);
fillSearchKeywordHash(appconfirmVO);
List<AppconfirmVO> 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<AppconfirmVO> selectActivityApprovalList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.selectActivityApprovalList", appconfirmVO);
fillSearchKeywordHash(appconfirmVO);
List<AppconfirmVO> 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<AppconfirmVO> excelAppconfirmList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO);
fillSearchKeywordHash(appconfirmVO);
List<AppconfirmVO> result = list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO);
for (AppconfirmVO row : result) {
decryptAppconfirmRow(row);
}
return result;
}
/** 확인서 내역 출력 */

View File

@ -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;
}

View File

@ -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<EvtMntVO> selectEventMgmtList(UserDefaultVO userSearchVO) throws Exception {
return list("BizAwardMntDAO.selectEventMgmtList", userSearchVO);
List<EvtMntVO> result = list("BizAwardMntDAO.selectEventMgmtList", userSearchVO);
decryptGnrRowsInPlace(result);
return result;
}
/**
* GNR(일반회원)만 frstRegisterNm이 암호문이다(개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10).
* USR/ENT/GRO는 각자 다른 테이블의 평문이므로 무조건 복호화하면 예외가 난다.
*/
private void decryptGnrRowsInPlace(List<EvtMntVO> 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;
}
/** 이벤트 수정 */

View File

@ -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
*/

View File

@ -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<GroupManageVO> 기업회원 목록정보
*/
@SuppressWarnings("unchecked")
public List<GroupManageVO> 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<GroupMberVO> groupMberList(GroupMberVO groupMberVO){
return list("groupMberManageDAO.groupMberList", groupMberVO);
List<GroupMberVO> 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<GroupManageVO> 기업회원 목록정보
*/
@SuppressWarnings("unchecked")
public List<GroupManageVO> 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<GroupManageVO> 기업회원 목록정보
*/
@SuppressWarnings("unchecked")
public List<GroupManageVO> 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){

View File

@ -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;
}

View File

@ -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<PrbroVO> selectPrbroList(PrbroVO prbroVO) throws Exception {
return list("BizPrbroDAO.selectPrbroList", prbroVO);
fillSearchKeywordHash(prbroVO);
List<PrbroVO> 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;
}
/** 등록 */

View File

@ -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;
}

View File

@ -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<PrmvpVO> selectPrmvpList(PrmvpVO prmvpVO) throws Exception {
return list("BizPrmvpDAO.selectPrmvpList", prmvpVO);
fillSearchKeywordHash(prmvpVO);
List<PrmvpVO> 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;
}
/** 등록 */

View File

@ -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;
}

View File

@ -10,16 +10,49 @@ 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;
@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<ProappVO> selectProappList(ProappVO proappVO) throws Exception {
return list("BizProappDAO.selectProappList", proappVO);
List<ProappVO> result = list("BizProappDAO.selectProappList", proappVO);
decryptListIfGnr(result, "mberNm", "mberNmSe");
return result;
}
/** 총 건수 조회 */
@ -59,7 +92,9 @@ public class BizProappDAO extends EgovComAbstractDAO {
/** 활동하기정보관리 조회 / 봉사신청 확인 */
public List<ProappVO> selectProappinfoList(ProappVO proappVO) throws Exception {
return list("BizProappDAO.selectProappinfoList", proappVO);
List<ProappVO> result = list("BizProappDAO.selectProappinfoList", proappVO);
decryptListIfGnr(result, "esntlNm", "userSe");
return result;
}
/** 활동하기정보관리 / 봉사신청 확인 총 건수 조회 */
@ -75,7 +110,9 @@ public class BizProappDAO extends EgovComAbstractDAO {
/** 활동하기정보관리 / 모집정보스크랩 조회 */
@SuppressWarnings("unchecked")
public List<ProappVO> selectProappscrapList(ProappVO proappVO) throws Exception {
return list("BizProappDAO.selectProappscrapList", proappVO);
List<ProappVO> result = list("BizProappDAO.selectProappscrapList", proappVO);
decryptListIfGnr(result, "esntlNm", "userSe");
return result;
}
/** 활동하기정보관리 / 모집정보스크랩 총 건수 조회 */
@ -91,12 +128,18 @@ public class BizProappDAO extends EgovComAbstractDAO {
/**활동내역확인 */
@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<ProappVO> selectActivityCnfirm_S(ProappVO proappVO) throws Exception {
return list("BizProappDAO.selectActivityCnfirm_S", proappVO);
List<ProappVO> result = list("BizProappDAO.selectActivityCnfirm_S", proappVO);
decryptListIfGnr(result, "esntlNm", "userSe");
decryptListIfGnr(result, "authNm", "authNmSe");
return result;
}
/**활동내역확인 총 건수 조회 */
@ -111,7 +154,15 @@ public class BizProappDAO extends EgovComAbstractDAO {
/** 활동내역확인 출력내역 키 */
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;
}
/** 활동내역확인 내역 키값 저장 */
@ -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<ProappVO> selectActivityGroupCnfirmList(ProappVO proappVO) throws Exception {
return list("BizProappDAO.selectActivityGroupCnfirmList", proappVO);
List<ProappVO> result = list("BizProappDAO.selectActivityGroupCnfirmList", proappVO);
decryptListIfGnr(result, "esntlNm", "userSe");
decryptListIfGnr(result, "authNm", "authNmSe");
return result;
}
/**활동내역확인 총 건수 조회 : 그룹 */
@ -155,17 +213,26 @@ 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<AppconfirmVO> selectMiddleActivityList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.selectMiddleAppconfirmList", appconfirmVO);
List<AppconfirmVO> result = list("BizAppconfirmDAO.selectMiddleAppconfirmList", appconfirmVO);
decryptListIfGnr(result, "mberNm", "mberNmSe");
return result;
}
/** 중간활동 신청내역 조회 */
public List<AppconfirmVO> selectMiddleConfirmList(AppconfirmVO appconfirmVO) throws Exception {
return list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO);
List<AppconfirmVO> result = list("BizAppconfirmDAO.excelAppconfirmList", appconfirmVO);
decryptListIfGnr(result, "mberNm", "mberNmSe");
decryptListIfGnr(result, "esntlNm", "userSe");
decryptListIfGnr(result, "authNm", "authNmSe");
decryptListIfGnr(result, "approvalgugunNm", "approvalgugunNmSe");
return result;
}
/** 중간활동 신청내역 조회 토탈*/

View File

@ -9,6 +9,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.uss.umt.service.UserDefaultVO;
import egovframework.rte.psl.dataaccess.util.EgovMap;
@ -16,20 +18,68 @@ 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<ProvolVO> 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<ProvolVO> selectProvolList(UserDefaultVO userSearchVO) throws Exception {
return list("BizProvolDAO.selectProvolList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<ProvolVO> 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<ProvolVO> excelProvolList(UserDefaultVO userSearchVO) throws Exception {
return list("BizProvolDAO.excelProvolList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<ProvolVO> result = list("BizProvolDAO.excelProvolList", userSearchVO);
decryptGnrRowsInPlace(result);
return result;
}
/** 맞춤봉사정보 List*/
@SuppressWarnings("unchecked")
public List<ProvolVO> selectMatchServiceinfoList(ProvolVO provolVO) throws Exception {
return list("BizProvolDAO.selectMatchServiceinfoList", provolVO);
List<ProvolVO> result = list("BizProvolDAO.selectMatchServiceinfoList", provolVO);
decryptGnrRowsInPlace(result);
return result;
}
/** 맞춤봉사정보 총 건수 조회 */
@ -82,17 +141,24 @@ public class BizProvolDAO extends EgovComAbstractDAO {
/** 리스트 조회 : 그룹 */
@SuppressWarnings("unchecked")
public List<ProvolVO> selectProvolGroupList(UserDefaultVO userSearchVO) throws Exception {
return list("BizProvolDAO.selectProvolGroupList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<ProvolVO> 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<ProvolVO> selectProvolRecruitList(UserDefaultVO userSearchVO) throws Exception {
return list("BizProvolDAO.selectProvolRecruitList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<ProvolVO> result = list("BizProvolDAO.selectProvolRecruitList", userSearchVO);
decryptGnrRowsInPlace(result);
return result;
}
/** 봉사정보 메일 조회 리스트 */
@ -125,7 +191,10 @@ public class BizProvolDAO extends EgovComAbstractDAO {
/** 리스트 조회 */
public List<ProvolVO> selectProvolMailingList(UserDefaultVO userSearchVO) throws Exception {
return list("BizProvolDAO.selectProvolMailingList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<ProvolVO> result = list("BizProvolDAO.selectProvolMailingList", userSearchVO);
decryptGnrRowsInPlace(result);
return result;
}
/** 지역맞춤 봉사 승인 프로세스 */
@ -139,6 +208,8 @@ public class BizProvolDAO extends EgovComAbstractDAO {
public List<ProvolVO> selectMatchAgainList(ProvolVO provolVO) {
// TODO Auto-generated method stub
return list("BizProvolDAO.selectMatchAgainList", provolVO);
List<ProvolVO> result = list("BizProvolDAO.selectMatchAgainList", provolVO);
decryptGnrRowsInPlace(result);
return result;
}
}

View File

@ -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;
}

View File

@ -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<SampleVO> selectSampleList(SampleVO sampleVO) throws Exception {
return list("BizSampleDAO.selectSampleList", sampleVO);
fillSearchKeywordHash(sampleVO);
List<SampleVO> 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;
}
/** 등록 */

View File

@ -58,6 +58,19 @@ public class ApprovalStatSummaryVO extends StatSummaryVO {
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;
}
@ -106,6 +119,19 @@ public class ApprovalStatSummaryVO extends StatSummaryVO {
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;
}

View File

@ -76,6 +76,19 @@ public class StatSummaryVO extends StatConditionVO {
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;
}

View File

@ -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<StatVO> selectMberStat(StatVO statVO) throws Exception {
@ -469,7 +487,11 @@ public class BizStatDAO extends EgovComAbstractDAO {
*/
@SuppressWarnings("unchecked")
public List<StatSummaryVO> selectStatSummaries(StatConditionVO searchVO) throws Exception {
return list("BizStatDAO.selectStatSummaries", searchVO);
List<StatSummaryVO> 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<ApprovalStatSummaryVO> aggregateApprovalStats(StatSummaryVO statVO) throws Exception {
return list("BizStatDAO.aggregateApprovalStats", statVO);
List<ApprovalStatSummaryVO> result = list("BizStatDAO.aggregateApprovalStats", statVO);
for (ApprovalStatSummaryVO row : result) {
decryptIfGnr(row, "mberNm", "mberNmSe");
decryptIfGnr(row, "esntlNm", "esntlNmSe");
}
return result;
}
/**

View File

@ -6,6 +6,8 @@ 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;
@ -16,6 +18,26 @@ 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,7 +45,10 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
*/
@SuppressWarnings("unchecked")
public List<MberManageVO> selectTalentMberList(UserDefaultVO userSearchVO){
return list("talentMberManageDAO.selectTalentMberList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<MberManageVO> result = list("talentMberManageDAO.selectTalentMberList", userSearchVO);
MemberNmDecryptSupport.decryptListInPlace(result, "mberNm");
return result;
}
/**
@ -32,6 +57,7 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
* @return int 재능회원총갯수
*/
public int selectTalentMberListTotCnt(UserDefaultVO userSearchVO) {
fillSearchKeywordHash(userSearchVO);
return (Integer)getSqlMapClientTemplate().queryForObject("talentMberManageDAO.selectTalentMberListTotCnt", userSearchVO);
}
@ -41,7 +67,9 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
* @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;
}
/**
@ -50,7 +78,9 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
* @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;
}
/**
@ -60,17 +90,29 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
*/
@SuppressWarnings("unchecked")
public List<MberManageVO> selectExcelTalentMberList(UserDefaultVO userSearchVO){
return list("talentMberManageDAO.selectExcelTalentMberList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<MberManageVO> result = list("talentMberManageDAO.selectExcelTalentMberList", userSearchVO);
MemberNmDecryptSupport.decryptListInPlace(result, "mberNm");
return result;
}
/**
* 기 등록된 특정 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력
*
* <p>일반회원(GNR)·그룹(GRO)이 UNION 되어 반환된다. MBER_NM 컬럼은 GNR 행은 암호문,
* GRO 행은 평문(그룹명, 암호화 대상 아님)이 섞여 있으므로 복호화는 반드시 조건부로 한다
* — {@link MemberNmDecryptSupport}를 행 전체에 무조건 적용하면 GRO 행의 평문에
* 복호화를 시도해 예외가 난다.</p>
*
* @param userSearchVO 검색조건
* @return List<MberManageVO> 기업회원 목록정보
*/
@SuppressWarnings("unchecked")
public List<MberManageVO> selectJoinTalentMberList(UserDefaultVO userSearchVO){
return list("talentMberManageDAO.selectJoinTalentMberList", userSearchVO);
fillSearchKeywordHash(userSearchVO);
List<java.util.Map<String, Object>> result = list("talentMberManageDAO.selectJoinTalentMberList", userSearchVO);
decryptGnrRowsInPlace(result);
return (List) result;
}
/**
@ -79,6 +121,20 @@ public class TalentMberManageDAO extends EgovComAbstractDAO{
* @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<java.util.Map<String, Object>> rows) {
if (rows == null) {
return;
}
for (int i = 0; i < rows.size(); i++) {
java.util.Map<String, Object> row = rows.get(i);
if (row != null && "GNR".equals(row.get("USER_TYPE"))) {
MemberNmDecryptSupport.decryptInPlace(row, "MBER_NM");
}
}
}
}

View File

@ -93,4 +93,17 @@ public class TestVO 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;
}
}

View File

@ -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<TestVO> selectTestList(TestVO testVO) throws Exception {
return list("BizTestDAO.selectTestList", testVO);
fillSearchKeywordHash(testVO);
List<TestVO> 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;
}
/** 등록 */

View File

@ -13,6 +13,8 @@
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="4"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="5"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="6"/>
<!-- 개인정보보호(추가제안 Action4, 2026-08-10): GNR(일반회원)일 때만 FRST_REGISTER_NM이 암호문이다. -->
<result property="userSe" column="USER_SE" columnIndex="7"/>
</resultMap>
<insert id="BBSAddedOptionsDAO.insertAddedOptionsInf" parameterClass="BoardMaster" >
@ -43,11 +45,12 @@
SELECT
a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
b.USER_SE
FROM
COMTNBBSMASTEROPTN a
LEFT OUTER JOIN (SELECT B.* FROM COMTNBBSMASTEROPTN A
INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM AS USER_NM,'GNR' AS USER_SE 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 COMTNBBSMASTEROPTN A

View File

@ -38,6 +38,7 @@
<result property="tmplatNm" column="TMPLAT_NM" columnIndex="16"/>
<result property="authFlag" column="AUTH_FLAG" columnIndex="17"/>
<result property="tmplatCours" column="TMPLAT_COURS" columnIndex="18"/>
<result property="userSe" column="USER_SE" columnIndex="19"/>
</resultMap>
<resultMap id="boardMasterAll" class="egovframework.com.cop.bbs.service.BoardMasterVO">
@ -138,7 +139,7 @@
a.BBS_ATTRB_CODE, c.CODE_NM as BBS_ATTRB_CODE_NM, a.BBS_NM,
a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM,
a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM
a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM, e.USER_SE
,(SELECT IFNULL(USE_AT,'N') FROM COMTNBBSUSE
WHERE BBS_ID = #bbsId#
AND TRGET_ID IN (#uniqId#, 'SYSTEM_DEFAULT_BOARD')

View File

@ -39,6 +39,7 @@
<result property="useAt" column="USE_AT" columnIndex="7"/>
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="8"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="9"/>
<result property="userSe" column="USER_SE" columnIndex="10"/>
</resultMap>
<resultMap id="selectBBSUse" class="egovframework.com.cop.bbs.service.BoardUseInfVO">
@ -167,7 +168,7 @@
SELECT * FROM (
SELECT
a.BBS_ID, b.BBS_NM, a.TRGET_ID, d.USER_NM, a.REGIST_SE_CODE, c.CODE_NM as REGIST_SE_CODE_NM,
a.USE_AT, a.FRST_REGISTER_ID, a.FRST_REGIST_PNTTM
a.USE_AT, a.FRST_REGISTER_ID, a.FRST_REGIST_PNTTM, d.USER_SE, d.USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -184,7 +185,7 @@
UNION ALL
SELECT
a.BBS_ID, b.BBS_NM, a.TRGET_ID, '[전체]' USER_NM, a.REGIST_SE_CODE, c.CODE_NM as REGIST_SE_CODE_NM,
a.USE_AT, a.FRST_REGISTER_ID, a.FRST_REGIST_PNTTM
a.USE_AT, a.FRST_REGISTER_ID, a.FRST_REGIST_PNTTM, '' as USER_SE, NULL as USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -202,7 +203,7 @@
case WHEN e.EMPLYR_ID is null THEN f.EMPLYR_ID ELSE e.EMPLYR_ID END as TRGET_ID,
case WHEN g.USER_NM is null THEN h.USER_NM ELSE g.USER_NM END as USER_NM,
'REGC07' as REGIST_SE_CODE, '게시판사용자등록' as REGIST_SE_CODE_NM,
'' as USE_AT, '' as FRST_REGISTER_ID, '' as FRST_REGIST_PNTTM
'' as USE_AT, '' as FRST_REGISTER_ID, '' as FRST_REGIST_PNTTM, '' as USER_SE, NULL as USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -226,7 +227,7 @@
) tt
]]>
<isEqual prepend="WHERE" property="searchCnd" compareValue="0">
<![CDATA[ tt.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (tt.USER_NM_HASH = #searchKeywordHash# OR tt.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
<![CDATA[
ORDER BY tt.USER_NM DESC
@ -238,7 +239,7 @@
<![CDATA[
SELECT COUNT(tt.BBS_ID) FROM (
SELECT
a.BBS_ID, d.USER_NM
a.BBS_ID, d.USER_NM, d.USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -254,7 +255,7 @@
AND a.REGIST_SE_CODE = 'REGC07'
UNION ALL
SELECT
a.BBS_ID, '[전체]' USER_NM
a.BBS_ID, '[전체]' USER_NM, NULL as USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -268,7 +269,7 @@
AND a.REGIST_SE_CODE in ('REGC05', 'REGC06')
UNION ALL
SELECT
a.BBS_ID, '' as USER_NM
a.BBS_ID, '' as USER_NM, NULL as USER_NM_HASH
FROM
COMTNBBSUSE a
LEFT OUTER JOIN COMTNBBSMASTER b
@ -292,7 +293,7 @@
) tt
]]>
<isEqual prepend="WHERE" property="searchCnd" compareValue="0">
<![CDATA[ tt.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (tt.USER_NM_HASH = #searchKeywordHash# OR tt.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
</select>

View File

@ -91,7 +91,8 @@
<result property="workMinorArea" column="WORK_MINOR_AREA" columnIndex="40"/>
<result property="adult" column="ADULT" columnIndex="41"/>
<result property="publicYn" column="PUBLIC_YN" columnIndex="42"/>
<result property="userSe" column="USER_SE" columnIndex="43"/>
<!-- 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10: 기존 idx43은 실제로는 a.MOB_YN을 가리키는 기존 버그(idx36부터 -1 밀림, 무관한 다른 필드는 손대지 않음) — 실제 위치(42)로 바로잡음 -->
<result property="userSe" column="USER_SE" columnIndex="42"/>
<result property="mobYn" column="MOB_YN" columnIndex="44"/>
<result property="nttNo" column="NTT_NO" columnIndex="45"/>
<result property="sortOrdr" column="SORT_ORDR" columnIndex="46"/>
@ -245,7 +246,8 @@
<result property="nttCn" column="NTT_CN" columnIndex="7" jdbcType="CLOB"/>
<result property="password" column="PASSWORD" columnIndex="8"/>
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="9"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="10"/>
<!-- 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10: 기존 columnIndex=10은 실제로는 NTCE_BGNDE를 가리키는 기존 버그(이 파일 다른 필드들도 원래부터 어긋나 있었음, 무관하게 손대지 않음) — 복호화 대상 필드라 이 항목만 실제 위치(8)로 바로잡음. PASSWORD(idx8)도 이미 같은 값을 받고 있었으므로 악화 없음 -->
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="8"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="11"/>
<result property="ntceBgnde" column="NTCE_BGNDE" columnIndex="12"/>
<result property="ntceEndde" column="NTCE_ENDDE" columnIndex="13"/>
@ -282,7 +284,8 @@
<result property="linkFld" column="LINK_FLD" columnIndex="43"/>
<result property="pblcteId" column="PBLCTE_ID" columnIndex="44"/>
<result property="activityCount" column="ACTIVITY_COUNT" columnIndex="45"/>
<result property="userSe" column="USER_SE" columnIndex="46"/>
<!-- 개인정보보호 기능개선 사업 추가제안 Action4, 2026-08-10: 실제 물리적 위치는 47(기존 idx46은 ACTIVITY_COUNT를 가리키는 기존 버그) -->
<result property="userSe" column="USER_SE" columnIndex="47"/>
</resultMap>
<resultMap id="boardDetail2" class="egovframework.com.cop.bbs.service.BoardVO">
@ -466,6 +469,7 @@
<result property="useAt" column="USE_AT" columnIndex="8"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="9"/>
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="10"/>
<result property="userSe" column="USER_SE" columnIndex="11"/>
</resultMap>
<select id="BBSManageDAO.selectMaxNttId" resultClass="java.lang.Long">
@ -621,7 +625,7 @@
<![CDATA[ a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%') ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="2">
<![CDATA[ b.USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="3">
<![CDATA[ (a.NTT_SJ LIKE CONCAT('%', #searchWrd#, '%') OR a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%')) ]]>
@ -755,7 +759,7 @@
<![CDATA[ a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%') ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="2">
<![CDATA[ b.USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="3">
<![CDATA[ (a.NTT_SJ LIKE CONCAT('%', #searchWrd#, '%') OR a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%')) ]]>
@ -851,7 +855,7 @@
<![CDATA[ a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%') ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="2">
<![CDATA[ b.USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="3">
<![CDATA[ (a.NTT_SJ LIKE CONCAT('%', #searchWrd#, '%') OR a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%')) ]]>
@ -943,7 +947,7 @@
<![CDATA[ a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%') ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="2">
<![CDATA[ b.USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="3">
<![CDATA[ (a.NTT_SJ LIKE CONCAT('%', #searchWrd#, '%') OR a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%')) ]]>
@ -1026,7 +1030,7 @@
<![CDATA[ a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%') ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="2">
<![CDATA[ b.USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<isEqual prepend="AND" property="searchCnd" compareValue="3">
<![CDATA[ (a.NTT_SJ LIKE CONCAT('%', #searchWrd#, '%') OR a.NTT_CN LIKE CONCAT('%', #searchWrd#, '%')) ]]>
@ -1282,7 +1286,7 @@
a.NTT_ID, a.NTT_SJ, a.NTCR_NM, a.PASSWORD,
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
as FRST_REGIST_PNTTM,
a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID, b.USER_SE
FROM
COMTNBBS a, COMVNUSERMASTER b
WHERE

View File

@ -25,6 +25,8 @@
<result property="useAt" column="USE_AT" columnIndex="8"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="9"/>
<result property="frstRegisterNm" column="FRST_REGISTER_ID" columnIndex="10"/>
<!-- 개인정보보호(추가제안 Action4, 2026-08-10): GNR(일반회원)일 때만 frstRegisterNm이 암호문이다. -->
<result property="userSe" column="USER_SE" columnIndex="11"/>
</resultMap>
<resultMap id="commentDetail" class="egovframework.com.cop.bbs.service.Comment">
@ -48,11 +50,12 @@
a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, 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_ID
b.USER_NM as FRST_REGISTER_ID,
b.USER_SE
FROM
COMTNCOMMENT a
LEFT OUTER JOIN (SELECT B.* FROM COMTNCOMMENT A
INNER JOIN (SELECT ESNTL_ID AS ESNTL_ID, MBER_NM AS USER_NM,'GNR' AS USER_SE 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 COMTNCOMMENT A
@ -103,7 +106,8 @@
a.ANSWER,
a.USE_AT,
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S') as FRST_REGIST_PNTTM,
a.WRTER_NM as FRST_REGISTER_ID
a.WRTER_NM as FRST_REGISTER_ID,
'USR' as USER_SE
FROM
COMTNCOMMENT a
WHERE a.BBS_ID = #bbsId# AND a.NTT_ID = #nttId#

View File

@ -13,6 +13,7 @@
<result property="userZip" column="USER_ZIP" columnIndex="4"/>
<result property="userAdres" column="USER_ADRES" columnIndex="5"/>
<result property="userEmail" column="USER_EMAIL" columnIndex="6"/>
<result property="userNmSe" column="USER_NM_SE" columnIndex="7"/>
</resultMap>
<resultMap id="UserInfList" class="egovframework.com.cop.com.service.UserInfVO">
@ -24,6 +25,7 @@
<result property="userEmail" column="USER_EMAIL" columnIndex="6"/>
<result property="useAt" column="USE_AT" columnIndex="7"/>
<result property="deletedAt" column="DELETED_AT" columnIndex="8"/>
<result property="userNmSe" column="USER_NM_SE" columnIndex="9"/>
</resultMap>
<resultMap id="AllUserInfList" class="egovframework.com.cop.com.service.UserInfVO">
@ -36,13 +38,13 @@
<![CDATA[
SELECT Z.* FROM ( SELECT @ROWNUM := @ROWNUM + 1 AS RN, TB.* FROM (
SELECT
ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL, USER_SE AS USER_NM_SE
FROM
COMVNUSERMASTER, (SELECT @ROWNUM := 0) AS RN
WHERE 1=1
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (USER_NM_HASH = #searchKeywordHash# OR USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
<![CDATA[
ORDER BY USER_NM
@ -59,7 +61,7 @@
WHERE 1=1
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ USER_NM LIKE CONCAT('%', #searchWrd#, '%') ]]>
<![CDATA[ (USER_NM_HASH = #searchKeywordHash# OR USER_NM LIKE CONCAT('%', #searchWrd#, '%')) ]]>
</isEqual>
</select>
@ -67,7 +69,7 @@
<![CDATA[
SELECT
a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
(SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #trgetId#) AS DELETED_AT
(SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #trgetId#) AS DELETED_AT, a.USER_SE AS USER_NM_SE
FROM
COMVNUSERMASTER a, COMTNCMMNTYUSER b
WHERE
@ -76,7 +78,7 @@
b.CMMNTY_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
<![CDATA[
ORDER BY a.USER_NM
@ -96,7 +98,7 @@
b.CMMNTY_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
</select>
@ -105,7 +107,7 @@
<![CDATA[
SELECT
a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
(SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #trgetId#) AS DELETED_AT
(SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #trgetId#) AS DELETED_AT, a.USER_SE AS USER_NM_SE
FROM
COMVNUSERMASTER a, COMTNCMMNTYUSER b
WHERE
@ -116,7 +118,7 @@
b.CMMNTY_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
<![CDATA[
ORDER BY a.USER_NM
@ -138,7 +140,7 @@
b.CMMNTY_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
</select>
@ -147,7 +149,7 @@
<![CDATA[
SELECT
a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
(SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #trgetId#) AS DELETED_AT
(SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #trgetId#) AS DELETED_AT, a.USER_SE AS USER_NM_SE
FROM
COMVNUSERMASTER a, COMTNCLUBUSER b
WHERE
@ -156,7 +158,7 @@
b.CLB_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
<![CDATA[
ORDER BY a.USER_NM
@ -176,7 +178,7 @@
b.CLB_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
</select>
@ -184,7 +186,7 @@
<![CDATA[
SELECT
a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
(SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #trgetId#) AS DELETED_AT
(SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #trgetId#) AS DELETED_AT, a.USER_SE AS USER_NM_SE
FROM
COMVNUSERMASTER a, COMTNCLUBUSER b
WHERE
@ -195,7 +197,7 @@
b.CLB_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
<![CDATA[
ORDER BY a.USER_NM
@ -217,7 +219,7 @@
b.CLB_ID = #trgetId#
]]>
<isEqual prepend="AND" property="searchCnd" compareValue="0">
<![CDATA[ a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (a.USER_NM_HASH = #searchKeywordHash# OR a.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isEqual>
</select>

View File

@ -15,6 +15,7 @@
<result property="useAt" column="USE_AT" columnIndex="5"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="6"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="7"/>
<result property="userSe" column="USER_SE" columnIndex="8"/>
</resultMap>
<resultMap id="scrapDetail" class="egovframework.com.cop.bbs.service.Scrap">
@ -26,6 +27,7 @@
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="6"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="7"/>
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="8"/>
<result property="userSe" column="USER_SE" columnIndex="9"/>
</resultMap>
<select id="BBSScrapDAO.selectScrapList" parameterClass="ScrapVO" resultMap="scrapList" >
@ -35,7 +37,7 @@
a.SCRAP_NM, 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
COMTNSCRAP a
LEFT OUTER JOIN COMVNUSERMASTER b
@ -99,7 +101,7 @@
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
as FRST_REGIST_PNTTM,
b.USER_NM as FRST_REGISTER_NM,
a.FRST_REGISTER_ID
a.FRST_REGISTER_ID, b.USER_SE
FROM
COMTNSCRAP a
LEFT OUTER JOIN COMVNUSERMASTER b

View File

@ -22,6 +22,7 @@
<result property="frstRegisterId" column="FRST_REGISTER_ID" columnIndex="4"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="5"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="6"/>
<result property="userSe" column="USER_SE" columnIndex="7"/>
</resultMap>
<resultMap id="smsRecptnList" class="egovframework.com.cop.sms.service.SmsRecptn">
@ -104,7 +105,7 @@
SELECT
a.SMS_ID, a.TRNSMIS_TELNO, a.TRNSMIS_CN,
a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM
DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM, b.USER_SE
FROM
COMTNSMS a
LEFT OUTER JOIN COMVNUSERMASTER b

View File

@ -23,6 +23,7 @@
<result property="useAt" column="USE_AT" columnIndex="9"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="10"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="11"/>
<result property="userSe" column="USER_SE" columnIndex="12"/>
</resultMap>
<resultMap id="satisfactionDetail" class="egovframework.com.cop.bbs.service.Satisfaction">
@ -37,6 +38,7 @@
<result property="useAt" column="USE_AT" columnIndex="9"/>
<result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM" columnIndex="10"/>
<result property="frstRegisterNm" column="FRST_REGISTER_NM" columnIndex="11"/>
<result property="userSe" column="USER_SE" columnIndex="12"/>
</resultMap>
<select id="BBSSatisfactionDAO.selectSatisfactionList" parameterClass="SatisfactionVO" resultMap="satisfactionList" >
@ -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

View File

@ -30,6 +30,7 @@
<result property="lastUpdusrId" column="LAST_UPDUSR_ID" columnIndex="10"/>
<result property="lastUpdusrNm" column="LAST_UPDUSR_NM" columnIndex="11"/>
<result property="lastUpdusrPnttm" column="LAST_UPDT_PNTTM" columnIndex="12"/>
<result property="frstRegisterNmSe" column="FRST_REGISTER_NM_SE" columnIndex="13"/>
</resultMap>
@ -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

View File

@ -33,13 +33,13 @@
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
@ -48,7 +48,7 @@
A.USER_ID LIKE CONCAT('%' , #searchKeyword#, '%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%'))
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="3">
A.GROUP_ID = #searchKeyword#
@ -88,13 +88,13 @@
<select id="authorGroupDAO.selectAuthorGroupListTotCnt" parameterClass="AuthorGroupVO" resultClass="int">
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
@ -103,7 +103,7 @@
A.USER_ID LIKE CONCAT('%' , #searchKeyword#, '%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%'))
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="3">
A.GROUP_ID = #searchKeyword#

View File

@ -38,13 +38,13 @@
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
@ -54,7 +54,7 @@
A.USER_ID LIKE '%'||#searchKeyword#||'%'
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
A.USER_NM LIKE '%'||#searchKeyword#||'%'
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE '%'||#searchKeyword#||'%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="3">
A.GROUP_ID = #searchKeyword#
@ -99,13 +99,13 @@
<select id="authorGroupDAO.selectAuthorGroupListTotCnt" parameterClass="AuthorGroupVO" resultClass="int">
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
@ -114,7 +114,7 @@
A.USER_ID LIKE '%'||#searchKeyword#||'%'
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
A.USER_NM LIKE '%'||#searchKeyword#||'%'
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE '%'||#searchKeyword#||'%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="3">
A.GROUP_ID = #searchKeyword#

View File

@ -30,6 +30,7 @@
<result property="userId" column="FRST_REGISTER_ID" columnIndex="9"/>
<result property="userNm" column="USER_NM" columnIndex="10"/>
<result property="regdate" column="FRST_REGIST_PNTTM" columnIndex="11"/>
<result property="userNmSe" column="USER_NM_SE" columnIndex="12"/>
</resultMap>
<resultMap id="insertDtaUseStatsList" class="egovframework.com.sts.dst.service.DtaUseStatsVO">
@ -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,

View File

@ -17,6 +17,7 @@
<result property="loginIp" column="CONECT_IP" />
<result property="loginId" column="CONECT_ID" />
<result property="loginNm" column="LOGIN_NM" />
<result property="loginNmSe" column="LOGIN_NM_SE" />
</resultMap>
<!-- 개인 최종로그인일자 update -->
@ -96,6 +97,7 @@
, 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
@ -115,6 +117,7 @@
, 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

View File

@ -21,6 +21,7 @@
<result property="rqesterIp" column="RQESTER_IP" />
<result property="rqesterId" column="RQESTER_ID" />
<result property="rqsterNm" column="RQESTER_NM" />
<result property="rqsterNmSe" column="RQESTER_NM_SE" />
</resultMap>
<!-- 시스템 로그 등록 -->
@ -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

View File

@ -12,6 +12,7 @@
<result property="occrrncDe" column="OCCRRNC_DE"/>
<result property="rqesterId" column="RQESTER_ID"/>
<result property="rqsterNm" column="RQESTER_NM"/>
<result property="rqsterNmSe" column="RQESTER_NM_SE"/>
<result property="srvcNm" column="SVC_NM"/>
<result property="methodNm" column="METHOD_NM"/>
<result property="creatCo" column="CREAT_CO"/>
@ -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
]]>
<isNotEmpty prepend="AND" property="searchWrd">
<![CDATA[ b.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchBgnDe">
<![CDATA[ a.OCCRRNC_DE BETWEEN #searchBgnDe# AND #searchEndDe# ]]>
@ -122,7 +125,7 @@
1 = 1
]]>
<isNotEmpty prepend="AND" property="searchWrd">
<![CDATA[ b.USER_NM LIKE CONCAT ('%', #searchWrd#,'%') ]]>
<![CDATA[ (b.USER_NM_HASH = #searchKeywordHash# OR b.USER_NM LIKE CONCAT ('%', #searchWrd#,'%')) ]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchBgnDe">
<![CDATA[ a.OCCRRNC_DE BETWEEN #searchBgnDe# AND #searchEndDe# ]]>

View File

@ -15,6 +15,7 @@
<result property="rqesterIp" column="RQESTER_IP"/>
<result property="rqesterId" column="RQESTER_ID"/>
<result property="rqsterNm" column="RQESTER_NM"/>
<result property="rqsterNmSe" column="RQESTER_NM_SE"/>
</resultMap>
<!-- 웹 로그 등록 -->
@ -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

View File

@ -33,7 +33,7 @@
WHERE 1 = 1
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="1">
A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%'))
</isEqual>
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
@ -47,7 +47,7 @@
WHERE 1 = 1
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="1">
A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%')
(A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM LIKE CONCAT('%' , #searchKeyword#, '%'))
</isEqual>
</isNotEmpty>
</select>
@ -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#

View File

@ -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 @@
<isEqual property="userSe" compareValue="GNR">
<![CDATA[
SELECT mber_id AS id
, mber_nm AS name
, mber_nm_enc AS name
, ihidNum AS ihidNum
, password AS password
, mber_email_adres AS email
@ -407,7 +407,7 @@
<isEqual property="userSe" compareValue="GNR">
<![CDATA[
SELECT mber_id AS id
, mber_nm AS name
, mber_nm_enc AS name
, ihidNum AS ihidNum
, password AS password
, mber_email_adres AS email
@ -496,7 +496,7 @@
<isEqual property="userSe" compareValue="GNR">
<![CDATA[
SELECT mber_id AS id
, mber_nm AS name
, mber_nm_enc AS name
, ihidNum AS ihidNum
, password AS password
, mber_email_adres AS email
@ -657,7 +657,7 @@
<![CDATA[
SELECT mber_id AS id
FROM COMTNGNRLMBER
WHERE mber_nm = #name#
WHERE mber_nm_hash = #nameHash#
AND mber_email_adres = #email#
AND mber_sttus = 'P'
]]>
@ -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#)
]]>
<isEqual property="sendCate" compareValue="email">
<![CDATA[ AND USER_EMAIL = #email# ]]>
@ -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#)
]]>
<isEqual property="sendCate" compareValue="email">
<![CDATA[ AND USER_EMAIL = #email# ]]>
@ -815,7 +815,7 @@
<!-- 휴먼고객 확인 -->
<select id="loginDAO.diapauseChk" parameterClass="loginVO" resultClass="loginVO">
<![CDATA[
SELECT A.* , B.USER_EMAIL AS email, B.USER_NM AS name
SELECT A.* , B.USER_EMAIL AS email, B.USER_NM AS name, B.USER_SE AS userSe
FROM COMTNDIAPAUSEMBER A
LEFT JOIN COMVNUSERMASTER B
ON A.MBER_ID = B.USER_ID

View File

@ -204,7 +204,7 @@
<isEqual property="userSe" compareValue="GNR">
<![CDATA[
SELECT mber_id AS id
, mber_nm AS name
, mber_nm_enc AS name
, ihidNum AS ihidNum
, password AS password
, mber_email_adres AS email
@ -269,7 +269,7 @@
<isEqual property="userSe" compareValue="GNR">
<![CDATA[
SELECT mber_id AS id
, mber_nm AS name
, mber_nm_enc AS name
, ihidNum AS ihidNum
, password AS password
, mber_email_adres AS email
@ -415,7 +415,7 @@
<![CDATA[
SELECT mber_id AS id
FROM COMTNGNRLMBER
WHERE mber_nm = #name#
WHERE mber_nm_hash = #nameHash#
AND mber_email_adres = #email#
AND mber_sttus = 'P'
]]>
@ -498,7 +498,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 mber_sttus = 'P'
]]>
@ -715,7 +715,7 @@
SELECT A.MBER_ID AS id
,B.MBER_EMAIL_ADRES AS email
,B.ESNTL_ID AS uniqId
,B.MBER_NM AS name
,B.MBER_NM_ENC AS name
,NVL(A.LAST_LOG,B.SBSCRB_DE) AS creatDt
,A.DIAPAUSE_DT
,A.DIAPAUSE_STAT

View File

@ -83,15 +83,17 @@
SEXDSTN_CODE,
BRTHDY AS BRTH,
'' AS JOB,
ESNTL_ID
ESNTL_ID,
'USR' AS USER_SE
FROM COMTNEMPLYRINFO
UNION ALL
SELECT
MBER_NM AS USER_NM,
MBER_NM_ENC AS USER_NM,
SEXDSTN_CODE,
'' AS BRTH,
'' AS JOB,
ESNTL_ID
ESNTL_ID,
'GNR' AS USER_SE
FROM COMTNGNRLMBER
) X
WHERE 1=1
@ -173,6 +175,7 @@
DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') FRST_REGISTER_PNTTM,
A.FRST_REGISTER_ID,
B.USER_NM FRST_REGISTER_NM,
B.USER_SE FRST_REGISTER_NM_SE,
A.LAST_UPDT_PNTTM,
A.LAST_UPDUSR_ID
, CASE WHEN DATEDIFF(SYSDATE(), A.FRST_REGIST_PNTTM) < 3 THEN 'Y' ELSE 'N' END IS_NEW
@ -196,7 +199,7 @@
AND A.QUSTNR_SJ LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="FRST_REGISTER_ID">
AND B.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%')
AND (B.USER_NM_HASH = #searchKeywordHash# OR B.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%'))
</isEqual>
<isEqual property="searchCondition" compareValue="QUSTNR_CN">
AND (A.QUSTNR_PURPS LIKE CONCAT ('%', #searchKeyword#,'%') OR A.QUSTNR_WRITNG_GUIDANCE_CN LIKE CONCAT ('%', #searchKeyword#,'%'))
@ -225,7 +228,7 @@
AND A.QUSTNR_SJ LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
<isEqual property="searchCondition" compareValue="FRST_REGISTER_ID">
AND B.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%')
AND (B.USER_NM_HASH = #searchKeywordHash# OR B.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%'))
</isEqual>
<isEqual property="searchCondition" compareValue="QUSTNR_CN">
AND (A.QUSTNR_PURPS LIKE CONCAT ('%', #searchKeyword#,'%') OR A.QUSTNR_WRITNG_GUIDANCE_CN LIKE CONCAT ('%', #searchKeyword#,'%'))

View File

@ -82,15 +82,17 @@
SEXDSTN_CODE,
BRTHDY AS BRTH,
'' AS JOB,
ESNTL_ID
ESNTL_ID,
'USR' AS USER_SE
FROM COMTNEMPLYRINFO
UNION ALL
SELECT
MBER_NM AS USER_NM,
MBER_NM_ENC AS USER_NM,
SEXDSTN_CODE,
'' AS BRTH,
'' AS JOB,
ESNTL_ID
ESNTL_ID,
'GNR' AS USER_SE
FROM COMTNGNRLMBER
) X
WHERE 1=1

View File

@ -92,6 +92,7 @@
A.FRST_REGIST_PNTTM FRST_REGISTER_PNTTM,
A.FRST_REGISTER_ID,
(SELECT USER_NM FROM COMVNUSERMASTER WHERE ESNTL_ID = A.FRST_REGISTER_ID) FRST_REGISTER_NM,
(SELECT USER_SE FROM COMVNUSERMASTER WHERE ESNTL_ID = A.FRST_REGISTER_ID) FRST_REGISTER_NM_SE,
A.LAST_UPDT_PNTTM,
A.LAST_UPDUSR_ID
FROM COMTNQUSTNRRESPONDINFO A

View File

@ -114,7 +114,7 @@
<![CDATA[user_id LIKE CONCAT('%' #searchKeyword# '%')]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition3" compareValue="2">
<![CDATA[user_nm LIKE CONCAT('%' #searchKeyword# '%')]]>
<![CDATA[(user_nm_hash = #searchKeywordHash# OR user_nm LIKE CONCAT('%' #searchKeyword# '%'))]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition3" compareValue="3">
<![CDATA[email_adres LIKE CONCAT('%' #searchKeyword# '%')]]>
@ -139,7 +139,7 @@
<![CDATA[user_id LIKE CONCAT ('%' #searchKeyword# '%')]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition3" compareValue="2">
<![CDATA[user_nm LIKE CONCAT( '%' #searchKeyword# '%')]]>
<![CDATA[(user_nm_hash = #searchKeywordHash# OR user_nm LIKE CONCAT( '%' #searchKeyword# '%'))]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition3" compareValue="3">
<![CDATA[email_adres LIKE CONCAT('%' #searchKeyword# '%')]]>
@ -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#
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="1">
b.MBER_NM LIKE CONCAT('%',#searchKeyword#,'%')
b.MBER_NM_HASH = #searchKeywordHash#
</isEqual>
<!-- <isNotEmpty prepend="AND" property="searchKeyword">
b.MBER_NM LIKE CONCAT('%',#searchKeyword#,'%')
@ -253,7 +253,7 @@
a.MBER_ID LIKE #searchKeyword#
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="1">
b.MBER_NM LIKE CONCAT('%',#searchKeyword#,'%')
b.MBER_NM_HASH = #searchKeywordHash#
</isEqual>
<isEqual prepend="AND" property="searchCondition1" compareValue="1">
<![CDATA[

View File

@ -150,7 +150,7 @@
a.MBER_ID
,a.LAST_LOG
,a.DIAPAUSE_DT
,b.MBER_NM
,b.MBER_NM_ENC AS MBER_NM
,b.SBSCRB_DE
,SYSDATE - NVL(a.DIAPAUSE_DT, b.SBSCRB_DE) AS ELAPSED_DT
,b.ESNTL_ID
@ -162,7 +162,7 @@
a.MBER_ID LIKE #searchKeyword#
</isEqual>
<isNotEmpty prepend="AND" property="searchKeyword">
b.MBER_NM LIKE '%' ||#searchKeyword#|| '%'
b.MBER_NM_HASH = #searchKeywordHash#
</isNotEmpty>
<isEqual prepend="AND" property="searchCondition1" compareValue="1">
<![CDATA[
@ -200,7 +200,7 @@
a.MBER_ID LIKE #searchKeyword#
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="1">
b.MBER_NM LIKE '%' ||#searchKeyword#|| '%'
b.MBER_NM_HASH = #searchKeywordHash#
</isEqual>
<isEqual prepend="AND" property="searchCondition1" compareValue="1">
<![CDATA[

View File

@ -676,7 +676,7 @@ 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,
@ -979,7 +979,7 @@ FROM(
(
SELECT
T2.mber_id,
T2.mber_nm,
T2.mber_nm_enc AS mber_nm,
DATE_FORMAT(T2.SBSCRB_DE, '%Y-%m-%d') AS SBSCRB_DE,
T3.VOLUNTEER_ALL_HOUR,
T2.birth_year,

View File

@ -382,7 +382,7 @@ SELECT * FROM ( SELECT rownum 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,

View File

@ -145,7 +145,7 @@
]]>
<isNotEmpty prepend="AND" property="keyword">
<![CDATA[
( A.USER_ID = #keyword# OR A.USER_NM = #keyword# )
( A.USER_ID = #keyword# OR A.USER_NM_HASH = #searchKeywordHash# OR A.USER_NM = #keyword# )
]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="activeSidoArea">

View File

@ -23,6 +23,9 @@
<result property="name" column="USER_NM" />
<result property="mbtlnum" column="MBTLNUM" />
<result property="recvSmsYn" column="RECV_SMS_YN" />
<!-- 개인정보보호(추가제안 Action4, 2026-08-10): GNR(일반회원) 행만 USER_NM이 암호문이다.
userSe 로 구분해 조건부 복호화한다(BizNoteDAO.selectSingleNote2). -->
<result property="userSe" column="USER_SE" />
</resultMap>
<!-- 개인수신쪽지 LIST -->
@ -280,11 +283,12 @@
, A.MBER_NM AS USER_NM
, A.MBTLNUM
, A.RECV_SMS_YN
, A.USER_SE AS USER_SE
FROM (
SELECT
ESNTL_ID
, MBER_ID AS MBER_ID
, MBER_NM
, MBER_NM_ENC AS MBER_NM
, 'GNR' AS USER_SE
, MBTLNUM
, RECV_SMS_YN

View File

@ -23,6 +23,8 @@
<result property="name" column="USER_NM" />
<result property="mbtlnum" column="MBTLNUM" />
<result property="recvSmsYn" column="RECV_SMS_YN" />
<!-- 개인정보보호(추가제안 Action4, 2026-08-10): GNR(일반회원) 행만 USER_NM이 암호문이다. -->
<result property="userSe" column="USER_SE" />
</resultMap>
<!-- 개인수신쪽지 LIST -->
@ -271,11 +273,12 @@
, MBER_NM AS USER_NM
, MBTLNUM
, RECV_SMS_YN
, USER_SE AS USER_SE
FROM (
SELECT
ESNTL_ID
, MBER_ID AS MBER_ID
, MBER_NM
, MBER_NM_ENC AS MBER_NM
, 'GNR' AS USER_SE
, MBTLNUM
, RECV_SMS_YN

View File

@ -36,6 +36,10 @@
<result property="approvalgugunNm" column="APPROVAL_GUGUN_NM" /><!-- 시군구 승인처 명 -->
<result property="workareArea" column="WORK_AREA" /><!-- 활동영역 -->
<result property="detailYn" column="DETAIL_YN" /><!-- 활동영역 -->
<result property="mberNmSe" column="MBER_NM_SE" />
<result property="userSe" column="USER_SE" />
<result property="authNmSe" column="AUTH_NM_SE" />
<result property="approvalgugunNmSe" column="APPROVAL_GUGUN_NM_SE" />
</resultMap>
<resultMap id="appAprovalMap" class="kr.or.arko.mnt.biz.appconfirm.service.AppconfirmVO" >
@ -68,6 +72,9 @@
<result property="workareArea" column="WORK_AREA" /><!-- 활동영역 -->
<result property="actType" column="ACT_TYPE" /><!-- 완료/중간 플래그 -->
<result property="midActSeq" column="MIDDLE_ACTIVITY_SEQ" /><!-- 중간활동확인시퀀스 -->
<result property="mberNmSe" column="MBER_NM_SE" />
<result property="userSe" column="USER_SE" />
<result property="approvalgugunNmSe" column="APPROVAL_GUGUN_NM_SE" />
</resultMap>
<resultMap id="appPrintMap" class="kr.or.arko.mnt.biz.appconfirm.service.AppconfirmVO" >
@ -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 @@
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="subject">
@ -474,7 +489,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -549,7 +564,7 @@
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="subject">
@ -564,7 +579,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -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 @@
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="esntlNm">
<![CDATA[
X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(X.USER_NM_HASH = #searchKeywordHash# OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="subject">
@ -772,12 +790,12 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="authNm">
<![CDATA[
G.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(G.USER_NM_HASH = #searchKeywordHash# OR G.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -787,7 +805,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -877,7 +895,7 @@
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="esntlNm">
<![CDATA[
X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(X.USER_NM_HASH = #searchKeywordHash# OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="subject">
@ -887,12 +905,12 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="authNm">
<![CDATA[
G.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(G.USER_NM_HASH = #searchKeywordHash# OR G.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -902,7 +920,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -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 @@
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%')
(C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="subject">
@ -1223,7 +1244,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
(D.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR C.USER_NM_HASH = #searchKeywordHash# OR C.USER_NM LIKE CONCAT('%', #searchKeyword#, '%') OR A.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -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

View File

@ -48,6 +48,7 @@
(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_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 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
B.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')
B.MBER_NM_HASH = #searchKeywordHash#
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -555,7 +557,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.CNSMRNAME LIKE CONCAT('%', #searchKeyword#, '%') OR C.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
(A.CNSMRNAME LIKE CONCAT('%', #searchKeyword#, '%') OR C.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_NM_HASH = #searchKeywordHash#)
]]>
</isEqual>
</isNotEmpty>
@ -692,7 +694,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
B.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%')
B.MBER_NM_HASH = #searchKeywordHash#
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -702,7 +704,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.CNSMRNAME LIKE CONCAT('%', #searchKeyword#, '%') OR C.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
(A.CNSMRNAME LIKE CONCAT('%', #searchKeyword#, '%') OR C.VOLUNTEER_TITLE LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_ID LIKE CONCAT('%', #searchKeyword#, '%') OR B.MBER_NM_HASH = #searchKeywordHash#)
]]>
</isEqual>
</isNotEmpty>

View File

@ -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 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
B.MBER_NM LIKE '%' || #searchKeyword# || '%'
B.MBER_NM_HASH = #searchKeywordHash#
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -327,7 +327,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.CNSMRNAME LIKE '%' || #searchKeyword# || '%' OR C.VOLUNTEER_TITLE LIKE '%' || #searchKeyword# || '%' OR B.MBER_ID LIKE '%' || #searchKeyword# || '%' OR B.MBER_NM LIKE '%' || #searchKeyword# || '%')
(A.CNSMRNAME LIKE '%' || #searchKeyword# || '%' OR C.VOLUNTEER_TITLE LIKE '%' || #searchKeyword# || '%' OR B.MBER_ID LIKE '%' || #searchKeyword# || '%' OR B.MBER_NM_HASH = #searchKeywordHash#)
]]>
</isEqual>
</isNotEmpty>
@ -451,7 +451,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="name">
<![CDATA[
B.MBER_NM LIKE '%' || #searchKeyword# || '%'
B.MBER_NM_HASH = #searchKeywordHash#
]]>
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="id">
@ -461,7 +461,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.CNSMRNAME LIKE '%' || #searchKeyword# || '%' OR C.VOLUNTEER_TITLE LIKE '%' || #searchKeyword# || '%' OR B.MBER_ID LIKE '%' || #searchKeyword# || '%' OR B.MBER_NM LIKE '%' || #searchKeyword# || '%')
(A.CNSMRNAME LIKE '%' || #searchKeyword# || '%' OR C.VOLUNTEER_TITLE LIKE '%' || #searchKeyword# || '%' OR B.MBER_ID LIKE '%' || #searchKeyword# || '%' OR B.MBER_NM_HASH = #searchKeywordHash#)
]]>
</isEqual>
</isNotEmpty>

View File

@ -120,6 +120,8 @@
<result property="frstRegisterId" column="FRST_REGISTER_ID" />
<result property="lastUpdtPnttm" column="LAST_UPDT_PNTTM" />
<result property="lastUpdusrId" column="LAST_UPDUSR_ID" />
<!-- 개인정보보호(추가제안 Action4, 2026-08-10): GNR(일반회원)일 때만 frstRegisterNm이 암호문이다. -->
<result property="userSe" column="USER_SE" />
<result property="frstRegisterNm" column="FRST_REGISTER_NM" /><!--
작성자 -->
<result property="atchFileId" column="ATCH_FILE_ID" /><!-- 파일ID -->
@ -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

View File

@ -20,6 +20,7 @@
<result property="workMajorArea" column="WORK_MAJOR_AREA" />
<result property="workMinorArea" column="WORK_MINOR_AREA" />
<result property="entrprsMberId" column="ENTRPRS_MBER_ID" />
<result property="entrprsMberIdSe" column="ENTRPRS_MBER_ID_SE" />
</resultMap>
<select id="groupMberManageDAO.selectGroupMberList" parameterClass="userSearchVO" resultClass="egovMap">
@ -41,6 +42,7 @@
d.CODE_NM as "workMajorArea",
e.CODE_NM as "workMinorArea",
f.USER_NM as "entrprsMberId"
,f.USER_SE as "entrprsMberIdSe"
,a.HOMEPAGE as "homePage"
,(SELECT COUNT(1) FROM BIZ_GROUP_MBER z INNER JOIN COMTNGNRLMBER y ON z.MBER_ID = y.MBER_ID WHERE z.GMBER_STTUS_CODE != 'D' AND z.GROUP_ID = a.GROUP_ID ) as "groMberCnt"
FROM BIZ_GROUP a
@ -399,7 +401,7 @@
A.GMBER_STTUS_CODE,
B.MBER_STTUS,
A.SBSCRB_DE,
B.MBER_NM,
B.MBER_NM_ENC AS MBER_NM,
B.ESNTL_ID
FROM BIZ_GROUP_MBER A
INNER JOIN COMTNGNRLMBER B ON A.MBER_ID = B.MBER_ID
@ -718,6 +720,7 @@
d.CODE_NM as "workMajorArea",
e.CODE_NM as "workMinorArea",
f.USER_NM as "entrprsMberId"
,f.USER_SE as "entrprsMberIdSe"
FROM BIZ_GROUP a
LEFT OUTER JOIN COMTNORGNZTINFO b ON b.ORGNZT_ID = a.ACTIVE_SIDO_AREA
LEFT OUTER JOIN BIZ_TEAM c ON c.ORGNZT_ID = a.ACTIVE_SIDO_AREA AND c.TEAM_ID = a.ACTIVE_GUGUN_AREA
@ -774,6 +777,7 @@
E.CODE_NM as WORK_MAJOR_AREA,
F.CODE_NM as WORK_MINOR_AREA,
H.USER_NM as ENTRPRS_MBER_ID
,H.USER_SE as ENTRPRS_MBER_ID_SE
FROM BIZ_GROUP_TALENT A
INNER JOIN BIZ_GROUP B ON A.GROUP_ID = B.GROUP_ID
INNER JOIN COMTNORGNZTINFO C ON C.ORGNZT_ID = B.ACTIVE_SIDO_AREA

View File

@ -395,7 +395,7 @@
A.GROUP_ID,
A.GMBER_STTUS_CODE,
A.SBSCRB_DE,
B.MBER_NM,
B.MBER_NM_ENC AS MBER_NM,
B.ESNTL_ID
FROM BIZ_GROUP_MBER A
INNER JOIN COMTNGNRLMBER B ON A.MBER_ID = B.MBER_ID

View File

@ -26,6 +26,7 @@
<result property="orignlFileNm" column="ORIGNL_FILE_NM" /><!-- 원본파일명 -->
<result property="fileExtsn" column="FILE_EXTSN" /><!-- 파일확장자 -->
<result property="fileSize" column="FILE_SIZE" /><!-- 파일사이즈 -->
<result property="frstRegisterNmSe" column="FRST_REGISTER_NM_SE" />
</resultMap>
<select id="BizPrbroDAO.selectPrbroList" parameterClass="PrbroVO" resultMap="PrbroMap">
@ -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 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.SJ LIKE CONCAT('%', #searchKeyword#, '%') OR A.CN LIKE CONCAT('%', #searchKeyword#, '%') OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
(A.SJ LIKE CONCAT('%', #searchKeyword#, '%') OR A.CN LIKE CONCAT('%', #searchKeyword#, '%') OR X.USER_NM_HASH = #searchKeywordHash# OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -105,7 +107,7 @@
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="all">
<![CDATA[
(A.SJ LIKE CONCAT('%', #searchKeyword#, '%') OR A.CN LIKE CONCAT('%', #searchKeyword#, '%') OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
(A.SJ LIKE CONCAT('%', #searchKeyword#, '%') OR A.CN LIKE CONCAT('%', #searchKeyword#, '%') OR X.USER_NM_HASH = #searchKeywordHash# OR X.USER_NM LIKE CONCAT('%', #searchKeyword#, '%'))
]]>
</isEqual>
</isNotEmpty>
@ -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

View File

@ -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

View File

@ -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

Some files were not shown because too many files have changed in this diff Show More