Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JPA
- Hibernate
- cubrid
- 하이버네이트
- 위경도계
- IntelliJ
- mysql polygon
- 파이어폭스41
- 쿼리
- 단축키
- Java
- shortcuts
- 큐브리드
- mybatis polygon mapper
- 캘리그라피
- mybatis polygon
- QGIS
- join
- 좌표계변환
- mybatis
- json parser
- 사진
- 좌표변환
- mysql gis
- Query
- spring
- JSON 변환
- 엽서
- 여행
- 자바
Archives
- Today
- Total
쏘댕
개인정보 마스킹처리 (휴대폰번호, 이메일) 본문
ID를 표시할때 ssoda**와 같이 마스킹 처리를 하는 Util을 구현했다.
ID는 핸드폰번호 또는 메일 주소의 포맷을 가지고 있다.
이메일 주소는 {userId}@gmail.com에서
userId.length를 기준으로 세글자 초과인 경우 뒤 세자리를 마스킹 처리하고,
세글자인 경우 뒤 두글자만 마스킹,
두글자 또는 한글자인 경우 모두 마스킹 처리했다.
핸드폰 번호는 가운데 3자리 또는 4자리를 마스킹 처리했다.
+ 핸드폰 번호가 011, 016.. 등등 다 010으로 통합한다고 했던거 같은데,
아직 남아있는지 어떤지 몰라서 일단 기존 포맷 " 011-000(세글자)-0000 "이랑 요즘(?) 번호 포맷 " 010-0000-0000 " 둘 다 허용되도록 했다.
예외의 경우에는 인풋으로 넘어온 값을 그대로 리턴해주도록 했다.
(서비스 특성상??)
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// TODO IdFormatter? 이름 다시 고민!
public class IdFormatterUtil {
private static final Logger logger = LoggerFactory.getLogger(IdFormatterUtil.class);
private static final String PHONE_NUM_PATTERN = "(01[016789])(\\d{3,4})(\\d{4})";
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
/**
* 이메일이든, 휴대폰번호든 각 포맷에 맞게 마스킹된 결과값 리턴해주는 함수
* 포맷이 맞지 않을 경우 인풋으로 들어온 값 그대로 리턴
*
* public은 이거 하나! valid check류의 메서드들도 추후 필요하면 public으로 바꿀 예정
*
* @param id
* @return maskedId
*/
public static String getMaskedId(String id) {
if (isEmail(id)) {
return getMaskedEmail(id);
} else if (isPhoneNum(id)) {
return getMaskedPhoneNum(id);
}
return id;
}
/**
* 이메일 포맷 Validator
* @param str
* @return isValidEmailFormat
*/
private static boolean isEmail(final String str) {
return isValid(EMAIL_PATTERN, str);
}
/**
* 휴대폰 번호 포맷 Validator
* @param str
* @return isValidCellPhoneNumFormat
*/
private static boolean isPhoneNum(final String str) {
return isValid(PHONE_NUM_PATTERN, str);
}
/**
* 문자열이 정규식에 맞는 포맷인지 체크
* @param regex
* @param target
* @return isValid
*/
private static boolean isValid(final String regex, final String target) {
Matcher matcher = Pattern.compile(regex).matcher(target);
return matcher.matches();
}
/**
* 이메일 주소 마스킹 처리
* @param email
* @return maskedEmailAddress
*/
private static String getMaskedEmail(String email) {
/*
* 요구되는 메일 포맷
* {userId}@domain.com
* */
String regex = "\\b(\\S+)+@(\\S+.\\S+)";
Matcher matcher = Pattern.compile(regex).matcher(email);
if (matcher.find()) {
String id = matcher.group(1); // 마스킹 처리할 부분인 userId
/*
* userId의 길이를 기준으로 세글자 초과인 경우 뒤 세자리를 마스킹 처리하고,
* 세글자인 경우 뒤 두글자만 마스킹,
* 세글자 미만인 경우 모두 마스킹 처리
*/
int length = id.length();
if (length < 3) {
char[] c = new char[length];
Arrays.fill(c, '*');
return email.replace(id, String.valueOf(c));
} else if (length == 3) {
return email.replaceAll("\\b(\\S+)[^@][^@]+@(\\S+)", "$1**@$2");
} else {
return email.replaceAll("\\b(\\S+)[^@][^@][^@]+@(\\S+)", "$1***@$2");
}
}
return email;
}
/**
* 휴대폰 번호 마스킹 처리
* @param phoneNum
* @return maskedCellPhoneNumber
*/
private static String getMaskedPhoneNum(String phoneNum) {
/*
* 요구되는 휴대폰 번호 포맷
* 01055557777 또는 0113339999 로 010+네자리+네자리 또는 011~019+세자리+네자리 이!지!만!
* 사실 0107770000 과 01188884444 같이 가운데 번호는 3자리 또는 4자리면 돈케어
* */
String regex = "(01[016789])(\\d{3,4})\\d{4}$";
Matcher matcher = Pattern.compile(regex).matcher(phoneNum);
if (matcher.find()) {
String replaceTarget = matcher.group(2);
char[] c = new char[replaceTarget.length()];
Arrays.fill(c, '*');
return phoneNum.replace(replaceTarget, String.valueOf(c));
}
return phoneNum;
}
}
정규표현식 찾아보니 재밌어서 쭉 서칭하면서 공부했지만..ㅎㅎ
결국 잘 모르겠어서 부분부분 찾아가면서 적용했다 @_@
이메일 마스킹 하는 것도 저렇게 조건검사 없이 더 간단히 할 수 있지 않을까.. 싶은뎅
게다가 위에 스태틱 스트링으로 선언해놓은 패턴으로 바로 할 수 있을 거 같은데......
다시봐야지 ㅋ_ㅋ
#####
'공부 > Java' 카테고리의 다른 글
Hibernate - 큐브리드 2 JOIN (0) | 2015.10.05 |
---|---|
[Hibernate] 하이버네이트 - 큐브리드 (0) | 2015.09.01 |
[웹 시큐어 코딩] owasp-java-html-sanitizer 적용 (0) | 2015.07.10 |
[MyBatis] 두테이블 정보를 한개의 모델로! Join 쿼리로 받기 (0) | 2015.01.09 |
Spring MVC Interceptors Example – HandlerInterceptor and HandlerInterceptorAdapter (0) | 2014.11.13 |
Comments