diff --git a/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp b/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp index ad1005e..6d828a3 100644 --- a/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp +++ b/WebContent/jsp/onl/apim/portaluser/portalUserMan.jsp @@ -398,15 +398,16 @@ - <%= localeMessage.getString("portalUser.userId") %> + <%= localeMessage.getString("portalUser.userId") %>(*) - <%= localeMessage.getString("portalUser.mobileNumber") %> + <%= localeMessage.getString("portalUser.mobileNumber") %>(*) +
(*) 암호화 항목 · 부분검색 불가(전체 일치)
diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/portaluser/PortalUserService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/portaluser/PortalUserService.java index 1566095..64ebf1d 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/portaluser/PortalUserService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/portaluser/PortalUserService.java @@ -38,7 +38,22 @@ public class PortalUserService extends AbstractEMSDataSerivce= 0) { + String plusRestored = searchUserId.replace(' ', '+'); + loginIdPredicate.or(qPortalUser.loginId.eq(plusRestored)) + .or(qPortalUser.emailAddr.eq(plusRestored)); + } + predicate.and(loginIdPredicate); } if (StringUtils.isNotBlank(portalUserUISearch.getSearchUserName())) { @@ -49,7 +64,9 @@ public class PortalUserService extends AbstractEMSDataSerivce { PortalUserUI ui = convertToUIWithMaskOption(entity, false); - // 목록의 휴대폰번호는 항상 마스킹 (중복 조회 모드에서만 컬럼이 노출되며 개인정보 보호) - if (ui != null && StringUtils.isNotBlank(ui.getMobileNumber())) { - ui.setMobileNumber(MaskingUtils.maskPhoneNumber(ui.getMobileNumber())); + // 목록의 개인정보(사용자명/이메일아이디/휴대폰번호)는 항상 마스킹하여 노출 (상세 조회에서만 마스킹 해제) + if (ui != null) { + if (StringUtils.isNotBlank(ui.getUserName())) { + ui.setUserName(MaskingUtils.maskName(ui.getUserName())); + } + if (StringUtils.isNotBlank(ui.getLoginId())) { + ui.setLoginId(MaskingUtils.maskEmailId(ui.getLoginId())); + } + if (StringUtils.isNotBlank(ui.getMobileNumber())) { + ui.setMobileNumber(MaskingUtils.maskPhoneNumber(ui.getMobileNumber())); + } } if (entity.getPortalOrg() != null) { @@ -80,7 +88,7 @@ public class PortalUserManService extends BaseService { /** * 사용자 별 휴대폰 번호 중복 허용 프로퍼티(Portal/user.mobile.duplicate.allow)를 확인한다. - * 프로퍼티가 없으면 기본값 'N'(허용안함)으로 생성하며, '허용안함'일 때 중복 휴대폰번호 사용자 수를 함께 반환한다. + * 프로퍼티가 없으면 기본값 'false'(허용안함)으로 생성하며, '허용안함'일 때 중복 휴대폰번호 사용자 수를 함께 반환한다. * * @return enabled(boolean): 중복 조회 기능 활성 여부, count(long): 중복 휴대폰번호 사용자 수 */ @@ -88,10 +96,12 @@ public class PortalUserManService extends BaseService { String allowValue = portalPropertyService.getOrCreateProperty( PORTAL_PROPERTY_GROUP, PROP_MOBILE_DUPLICATE_ALLOW, - "N", - "사용자 별 휴대폰 번호 중복 허용 여부 (Y:허용, N:허용안함). 허용안함일 때 사용자 관리 목록에 중복 휴대폰번호 사용자 조회 기능을 노출"); + "false", + "사용자 별 휴대폰 번호 중복 허용 여부 (true:허용, false:허용안함). 허용안함일 때 사용자 관리 목록에 중복 휴대폰번호 사용자 조회 기능을 노출"); - boolean checkEnabled = "N".equalsIgnoreCase(allowValue); + // 레거시 Y/N 값도 허용으로 함께 인식 (true/Y → 허용, 그 외 → 허용안함) + boolean allowed = "true".equalsIgnoreCase(allowValue) || "Y".equalsIgnoreCase(allowValue); + boolean checkEnabled = !allowed; long duplicateUserCount = checkEnabled ? portalUserService.countDuplicateMobileUsers() : 0L; Map info = new HashMap<>();