File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2025-07-21
2025-07-21
package itn.let.uat.uia.web;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.Random;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import com.icert.comm.secu.IcertSecuManager;
import itn.let.cert.phone.service.CertPhoneService;
import itn.let.cert.phone.service.MberCertPhoneVO;
import itn.let.uat.uia.service.AuthCertVO;
import itn.let.uss.umt.service.MberManageVO;
@Component("KmcCertChecker")
public class KmcCertChecker {
@Resource(name = "CertPhoneService")
private CertPhoneService certPhoneService;
//회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용
public AuthCertVO authCertCheck(
MberCertPhoneVO mberCertPhoneVO
, HttpServletRequest request
) {
//url 세팅
mberCertPhoneVO = setMberCertPhoneVO(request, mberCertPhoneVO);
//kmc step 01 데이터
//reqNum은 최대 40byte 까지 사용 가능
String reqNum = getDay() + getRanNum(); //요청번호
String tr_cert = "";
String cpId = "MJOM1001"; // 회원사ID
String urlCode = mberCertPhoneVO.getUrlCode(); // URL코드
String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) )
String date = getDay(); // 요청일시
String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증
// String name = ""; // 성명
String name = mberCertPhoneVO.getName(); // 성명
String phoneNo = mberCertPhoneVO.getPhoneNo(); // 휴대폰번호
String phoneCorp = mberCertPhoneVO.getPhoneCorp(); // 이동통신사
if(phoneCorp == null) phoneCorp = "";
String birthDay = mberCertPhoneVO.getBirthDay(); // 생년월일
String gender = mberCertPhoneVO.getGender(); // 성별
if(gender == null) gender = "";
String nation = mberCertPhoneVO.getNation(); // 내외국인 구분 - 0:내국인, 1:외국인
String plusInfo = mberCertPhoneVO.getPlusInfo(); // 추가DATA정보
String extendVar = "0000000000000000"; // 확장변수
//End-tr_cert 데이터 변수 선언 ---------------------------------------------------------------
String tr_url = getDomain(request) + mberCertPhoneVO.getTrUrl();// // 본인인증서비스 결과수신 POPUP URL
String tr_add = "N"; // IFrame사용여부
//01. 한국모바일인증(주) 암호화 모듈 선언
IcertSecuManager seed = new IcertSecuManager();
//02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화)
String enc_tr_cert = "";
tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar;
enc_tr_cert = seed.getEnc(tr_cert, "");
//03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC)
String hmacMsg = "";
hmacMsg = seed.getMsg(enc_tr_cert);
//04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화)
tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, "");
AuthCertVO authCertVO = new AuthCertVO();
authCertVO.setTr_cert(tr_cert);
authCertVO.setTr_url(tr_url);
authCertVO.setTr_add(tr_add);
return authCertVO;
}
private String getDomain(HttpServletRequest request) {
String serverNm = request.getScheme() + "://" + request.getServerName();
if(request.getServerPort() != 80
&& request.getServerPort() != 443) {
serverNm += ":" + request.getServerPort();
}
return serverNm;
}
private String getDay() {
Calendar today = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String day = sdf.format(today.getTime());
return day;
}
private String getRanNum() {
Random ran = new Random();
//랜덤 문자 길이
int numLength = 6;
String randomStr = "";
for (int i = 0; i < numLength; i++) {
//0 ~ 9 랜덤 숫자 생성
randomStr += ran.nextInt(10);
}
return randomStr;
}
private MberCertPhoneVO setMberCertPhoneVO(
HttpServletRequest request
, MberCertPhoneVO mberCertPhoneVO
) {
mberCertPhoneVO.setUrl(mberCertPhoneVO.getTrUrl());
mberCertPhoneVO.setHost(getDomain(request));
MberCertPhoneVO tmpMberCertPhoneVO = new MberCertPhoneVO();
try {
tmpMberCertPhoneVO = certPhoneService.selectCertUrlCode(mberCertPhoneVO);
} catch (Exception e) {
System.out.println(e.getMessage());
}
if(tmpMberCertPhoneVO != null) {
mberCertPhoneVO.setUrl(tmpMberCertPhoneVO.getUrl());
mberCertPhoneVO.setHost(tmpMberCertPhoneVO.getHost());
mberCertPhoneVO.setUrlCode(tmpMberCertPhoneVO.getUrlCode());
}
return mberCertPhoneVO;
}
}