마스킹 표준화 적용 (eapim-admin/portal/JS)
eapim-admin CI / build (push) Has been cancelled

- admin: elink-online-core 표준 위임(e메일/이름/전화/IP)으로 규칙 일원화
- portal/JS: 표준 로직 직접 구현 + 기존 owner 비마스킹 유지
- 호출처 무수정/인라인 중복 제거/테스트 통과
This commit is contained in:
Rinjae
2026-06-18 17:56:32 +09:00
parent e34829437d
commit 10db8129eb
5 changed files with 201 additions and 119 deletions
@@ -0,0 +1,128 @@
package com.eactive.eai.rms.onl.apim.masking;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
/**
* eapim-admin {@link MaskingUtils}가 보안아키텍처 표준 규칙(elink-online-core)으로
* 위임되어 동작하는지 검증한다.
*/
class MaskingUtilsTest {
// --- 이메일 (maskEmailId) ---
@Test
@DisplayName("이메일 — 아이디 앞2·뒤2 마스킹")
void maskEmailId_normal() {
assertEquals("**st1**@test.com", MaskingUtils.maskEmailId("test123@test.com"));
}
@Test
@DisplayName("이메일 — 아이디 4자: 전체 마스킹")
void maskEmailId_fourChars() {
assertEquals("****@test.com", MaskingUtils.maskEmailId("test@test.com"));
}
@Test
@DisplayName("이메일 — 아이디 1자: 전체 마스킹")
void maskEmailId_oneChar() {
assertEquals("*@123.com", MaskingUtils.maskEmailId("1@123.com"));
}
@Test
@DisplayName("이메일 — @ 없으면 원본 / null·빈문자 방어")
void maskEmailId_invalidAndNull() {
assertEquals("notanemail", MaskingUtils.maskEmailId("notanemail"));
assertNull(MaskingUtils.maskEmailId(null));
assertEquals("", MaskingUtils.maskEmailId(""));
}
// --- 이름 (maskName) ---
@Test
@DisplayName("이름 — 2자: 뒤 1자리")
void maskName_2chars() {
assertEquals("가*", MaskingUtils.maskName("가나"));
}
@Test
@DisplayName("이름 — 3자: 가운데 1자리")
void maskName_3chars() {
assertEquals("가*다", MaskingUtils.maskName("가나다"));
}
@Test
@DisplayName("이름 — 4자: 앞뒤 제외 가운데 전체")
void maskName_4chars() {
assertEquals("가**라", MaskingUtils.maskName("가나다라"));
}
@Test
@DisplayName("이름 — 5자: 앞뒤 제외 가운데 전체")
void maskName_5chars() {
assertEquals("가***마", MaskingUtils.maskName("가나다라마"));
}
@Test
@DisplayName("이름 — 1자/null/빈문자 방어")
void maskName_oneAndNull() {
assertEquals("", MaskingUtils.maskName(""));
assertNull(MaskingUtils.maskName(null));
assertEquals("", MaskingUtils.maskName(""));
}
// --- 전화/휴대폰/Fax (maskPhoneNumber) ---
@Test
@DisplayName("전화 — 2·3번째 세그먼트 각 뒤 2자리")
void maskPhoneNumber_normal() {
assertEquals("010-12**-12**", MaskingUtils.maskPhoneNumber("010-1234-1234"));
assertEquals("064-12**-56**", MaskingUtils.maskPhoneNumber("064-1234-5678"));
}
@Test
@DisplayName("전화 — 하이픈 없는 11자리")
void maskPhoneNumber_noHyphen() {
assertEquals("01012**56**", MaskingUtils.maskPhoneNumber("01012345678"));
}
@Test
@DisplayName("전화 — null/빈문자 방어")
void maskPhoneNumber_null() {
assertNull(MaskingUtils.maskPhoneNumber(null));
assertEquals("", MaskingUtils.maskPhoneNumber(""));
}
// --- IP (maskIpAddress) ---
@Test
@DisplayName("IPv4 — 3번째 옥텟 마스킹")
void maskIpAddress_ipv4() {
assertEquals("172.0.***.1", MaskingUtils.maskIpAddress("172.0.0.1"));
assertEquals("192.168.***.1", MaskingUtils.maskIpAddress("192.168.100.1"));
}
@Test
@DisplayName("IPv6 — 마지막 그룹 마스킹")
void maskIpAddress_ipv6() {
assertEquals(
"AAAA:BBBB:CCCC:DDDD:EEEE:FFFF:0000:****",
MaskingUtils.maskIpAddress("AAAA:BBBB:CCCC:DDDD:EEEE:FFFF:0000:1111"));
}
@Test
@DisplayName("IP — 쉼표 구분 다중 IPv4")
void maskIpAddress_multiple() {
assertEquals("192.168.***.1,10.0.***.2", MaskingUtils.maskIpAddress("192.168.100.1,10.0.0.2"));
}
@Test
@DisplayName("IP — null/빈문자 방어")
void maskIpAddress_null() {
assertNull(MaskingUtils.maskIpAddress(null));
assertEquals("", MaskingUtils.maskIpAddress(""));
}
}