Merge branch '4608_kmc암호화모듈' into master_tolag3
This commit is contained in:
commit
12eaff7979
7
.gitignore
vendored
7
.gitignore
vendored
@ -203,3 +203,10 @@ rebel.xml
|
||||
/mvnw.cmd
|
||||
/.gemini.zip
|
||||
/CLAUDE.md
|
||||
|
||||
<<<<<<< HEAD
|
||||
# Mac OS
|
||||
=======
|
||||
### Mac OS ###
|
||||
>>>>>>> refs/heads/5419_전화번호거짓표시50건이상
|
||||
.DS_Store
|
||||
9
pom.xml
9
pom.xml
@ -477,12 +477,19 @@
|
||||
</dependency>
|
||||
|
||||
<!-- kmc 본인인증 -->
|
||||
<dependency>
|
||||
<!-- <dependency>
|
||||
<groupId>kmc</groupId>
|
||||
<artifactId>ICERTSecu_JDK18</artifactId>
|
||||
<version>1</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar</systemPath>
|
||||
</dependency> -->
|
||||
|
||||
<!-- kmc 본인인증 ver 2 암호화 모듈 추가 버전 -->
|
||||
<dependency>
|
||||
<groupId>kmc</groupId>
|
||||
<artifactId>ICERTSecu</artifactId>
|
||||
<version>JDK18_v2</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
@ -34,12 +34,11 @@ public class CertPhoneWebController {
|
||||
|
||||
@RequestMapping(value = {"/web/cert/log/insertCertLog.do"})
|
||||
public ResponseEntity<StatusResponse> insertCertLog(HttpServletRequest request) throws Exception {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, certPhoneService.insertCertLog(request), LocalDateTime.now()));
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping(value = {"/web/cert/log/kmcErrorPage.do"})
|
||||
public String kmcErrorPage() throws Exception {
|
||||
return "web/cop/kmc/certResultError";
|
||||
}
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class AddrGroupController {
|
||||
private EgovMberManageService mberManageService;
|
||||
|
||||
@Resource(name = "KmcCertChecker")
|
||||
private KmcCertChecker kmcCertCheck;
|
||||
private KmcCertChecker kmcCertChecker;
|
||||
|
||||
/**
|
||||
* 주소록 그룹 리스트
|
||||
@ -954,7 +954,7 @@ public class AddrGroupController {
|
||||
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do");
|
||||
mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId());
|
||||
|
||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
||||
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||
|
||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||
@ -979,241 +979,16 @@ public class AddrGroupController {
|
||||
*/
|
||||
|
||||
@RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do")
|
||||
public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
|
||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
||||
RedirectAttributes redirectAttributes) throws Exception {
|
||||
public String authRequestFindIdPwAjax(
|
||||
HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model
|
||||
, @RequestParam Map<String, Object> commandMap
|
||||
, @ModelAttribute("searchVO") KmcVO kmcVO
|
||||
, RedirectAttributes redirectAttributes
|
||||
) throws Exception {
|
||||
|
||||
String errMessage = ""; // 에러메세지
|
||||
|
||||
String rec_cert = ""; // 결과값(암호화)
|
||||
String certNum = ""; // certNum
|
||||
|
||||
rec_cert = request.getParameter("rec_cert").trim();
|
||||
certNum = request.getParameter("certNum").trim();
|
||||
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
kmcVO.setCertNum(certNum);
|
||||
// 파라미터 유효성 검증
|
||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
||||
errMessage = "비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
// 변수선언
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||
k_certNum = certNum;
|
||||
String date = ""; // 요청일시
|
||||
String CI = ""; // 연계정보(CI)
|
||||
String DI = ""; // 중복가입확인정보(DI)
|
||||
String phoneNo = ""; // 휴대폰번호
|
||||
String phoneCorp = ""; // 이동통신사
|
||||
String birthDay = ""; // 생년월일
|
||||
String gender = ""; // 성별
|
||||
String nation = ""; // 내국인
|
||||
String name = ""; // 성명
|
||||
String M_name = ""; // 미성년자 성명
|
||||
String M_birthDay = ""; // 미성년자 생년월일
|
||||
String M_Gender = ""; // 미성년자 성별
|
||||
String M_nation = ""; // 미성년자 내외국인
|
||||
String result = ""; // 결과값
|
||||
|
||||
String certMet = ""; // 인증방법
|
||||
String ip = ""; // ip주소
|
||||
String plusInfo = "";
|
||||
|
||||
String encPara = "";
|
||||
String encMsg1 = "";
|
||||
String encMsg2 = "";
|
||||
String msgChk = "";
|
||||
|
||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||
|
||||
// 02. 1차 복호화
|
||||
// 수신된 certNum를 이용하여 복호화
|
||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
||||
|
||||
// 03. 1차 파싱
|
||||
int inf1 = rec_cert.indexOf("/", 0);
|
||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
||||
|
||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
||||
|
||||
// 04. 위변조 검증
|
||||
encMsg2 = seed.getMsg(encPara);
|
||||
kmcVO.setEncMsg2(encMsg2);
|
||||
if (encMsg2.equals(encMsg1)) {
|
||||
msgChk = "Y";
|
||||
}
|
||||
|
||||
if (!"Y".equals(msgChk)) {
|
||||
errMessage = "비정상접근입니다.";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
// 05. 2차 복호화
|
||||
rec_cert = seed.getDec(encPara, k_certNum);
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
// 06. 2차 파싱
|
||||
int info1 = rec_cert.indexOf("/", 0);
|
||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
||||
|
||||
certNum = rec_cert.substring(0, info1);
|
||||
kmcVO.setCertNum(certNum);
|
||||
date = rec_cert.substring(info1 + 1, info2);
|
||||
kmcVO.setDate(date);
|
||||
CI = rec_cert.substring(info2 + 1, info3);
|
||||
kmcVO.setCI(CI);
|
||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
||||
kmcVO.setPhoneNo(phoneNo);
|
||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
||||
kmcVO.setPhoneCorp(phoneCorp);
|
||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
||||
kmcVO.setBirthDay(birthDay);
|
||||
gender = rec_cert.substring(info6 + 1, info7);
|
||||
kmcVO.setGender(gender);
|
||||
nation = rec_cert.substring(info7 + 1, info8);
|
||||
kmcVO.setNation(nation);
|
||||
name = rec_cert.substring(info8 + 1, info9);
|
||||
kmcVO.setName(name);
|
||||
result = rec_cert.substring(info9 + 1, info10);
|
||||
kmcVO.setResult(result);
|
||||
certMet = rec_cert.substring(info10 + 1, info11);
|
||||
kmcVO.setCertMet(certMet);
|
||||
ip = rec_cert.substring(info11 + 1, info12);
|
||||
kmcVO.setIp(ip);
|
||||
M_name = rec_cert.substring(info12 + 1, info13);
|
||||
kmcVO.setMName(M_name);
|
||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
||||
kmcVO.setMBirthDay(M_birthDay);
|
||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
||||
kmcVO.setMGender(M_Gender);
|
||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
||||
kmcVO.setMNation(M_nation);
|
||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
||||
kmcVO.setPlusInfo(plusInfo);
|
||||
DI = rec_cert.substring(info17 + 1, info18);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
// 07. CI, DI 복호화
|
||||
CI = seed.getDec(CI, k_certNum);
|
||||
kmcVO.setCI(CI);
|
||||
DI = seed.getDec(DI, k_certNum);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
if ("Y".equals(result)) {
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
String regex = "";
|
||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
||||
errMessage = "요청번호 비정상.";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (date.length() != 14 || !paramChk(regex, date)) {
|
||||
errMessage = "요청일시";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (certMet.length() != 1 || !paramChk(regex, certMet)) {
|
||||
errMessage = "본인인증방법 비정상" + certMet;
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
|
||||
errMessage = "휴대폰번호 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
|
||||
errMessage = "이동통신사 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
|
||||
errMessage = "생년월일 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (gender.length() != 1 || !paramChk(regex, gender)) {
|
||||
errMessage = "성별 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (nation.length() != 1 || !paramChk(regex, nation)) {
|
||||
errMessage = "내/외국인 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
||||
if (name.length() > 60 || !paramChk(regex, name)) {
|
||||
errMessage = "성명 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (result.length() != 1 || !paramChk(regex, result)) {
|
||||
errMessage = "결과값 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-?.,-]*";
|
||||
if (M_name.length() != 0) {
|
||||
if (M_name.length() > 60 || !paramChk(regex, M_name)) {
|
||||
errMessage = "미성년자 성명 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_birthDay.length() != 0) {
|
||||
if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
|
||||
errMessage = "미성년자 생년월일 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_Gender.length() != 0) {
|
||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
||||
errMessage = "미성년자 성별 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_nation.length() != 0) {
|
||||
if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
|
||||
errMessage = "미성년자 내/외국인 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||
|
||||
// KMC 본인인증 로그
|
||||
AuthCertVO certVO = new AuthCertVO();
|
||||
|
||||
@ -3,6 +3,8 @@ package itn.let.mjo.mjocommon;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -16,10 +18,8 @@ import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.httpclient.methods.PostMethod;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.mysql.jdbc.StringUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import egovframework.com.idgen.CustomIdGnrService;
|
||||
import egovframework.rte.fdl.cmmn.exception.FdlException;
|
||||
@ -27,17 +27,22 @@ import itn.com.cmm.MjonMsgSendVO;
|
||||
import itn.com.cmm.OptimalMsgResultDTO;
|
||||
import itn.com.cmm.util.MsgSendUtils;
|
||||
import itn.com.cmm.util.SlackMessageFormatUtil;
|
||||
import itn.com.cmm.util.StringUtil;
|
||||
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.mail.service.StatusResponse;
|
||||
import itn.let.mjo.event.service.MjonEventService;
|
||||
import itn.let.mjo.event.service.MjonEventVO;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import itn.let.mjo.msg.service.impl.MjonMsgDAO;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgHolidayService;
|
||||
import itn.let.mjo.msgholiday.service.MsgHolidayVO;
|
||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||
import itn.let.sym.site.service.JoinSettingVO;
|
||||
import itn.let.uat.uia.web.SendLogVO;
|
||||
import itn.let.uss.umt.service.EgovUserManageService;
|
||||
import itn.let.uss.umt.service.UserManageVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -70,6 +75,12 @@ public class MjonCommon {
|
||||
|
||||
@Resource(name = "egovMjonMsgIdCGnrService")
|
||||
private CustomIdGnrService idgenMsgCId;
|
||||
|
||||
@Resource(name = "mjonMsgDAO")
|
||||
private MjonMsgDAO mjonMsgDAO;
|
||||
|
||||
@Resource(name = "MjonMsgDataService")
|
||||
private MjonMsgDataService mjonMsgDataService;
|
||||
|
||||
|
||||
|
||||
@ -784,8 +795,120 @@ private int parseIntOrDefault(String value, int defaultValue) {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void sendMessagesIfOverFifty(int cnt, String callTo) throws Exception {
|
||||
if(
|
||||
cnt >= 50 //50건 이상일 경우만 발송
|
||||
&& StringUtil.isNotEmpty(callTo) // null, "" 체크
|
||||
&& callTo.startsWith("010") // 010으로 시작하는 휴대폰번호일 경우
|
||||
&& "Y".equals(selectSmsNotiIfOverFiftySetting()) // 안내문자 발송 on 인경우만
|
||||
&& !sysMsgTodaySendYn(callTo) // 금일 1회 이상 보낸 이력없을 경우만 발송
|
||||
) {
|
||||
|
||||
//50건이상 발송 안내문자 구분값 = 01
|
||||
String sendMsgType = "01";
|
||||
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
String contents = "[인터넷 대량문자발송안내] 문자온에서 "+ callTo + " 번호로 " + today + "에 인터넷 대량 문자(50통 이상)가 발송되었습니다."
|
||||
+ "\n※ 번호도용이 의심되는 경우, 이용 중인 이동통신사의 휴대전화 번호도용 문자차단 부가서비스(무료)에 가입하여 피해를 예방할 수 있습니다.";
|
||||
this.sendSysMsg(
|
||||
"15518011"
|
||||
, callTo
|
||||
, contents
|
||||
, sendMsgType
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method Name : sendSysMsg
|
||||
* Description : 관리자 안내 문자 공통
|
||||
*
|
||||
* @param callFrom : 발신번호
|
||||
* @param callTo : 수신번호
|
||||
* @param contents : 내용
|
||||
* @param sendMsgType : 발신내용 타입 - 01: 대량문자발송안내
|
||||
* @return
|
||||
* @throws Exception
|
||||
* @return MjonMsgReturnVO 설명
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MjonMsgReturnVO sendSysMsg(
|
||||
String callFrom
|
||||
, String callTo
|
||||
, String contents
|
||||
, String sendMsgType
|
||||
) throws Exception {
|
||||
|
||||
//결과 vo
|
||||
MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
|
||||
|
||||
MjonMsgVO mjonMsgVO = new MjonMsgVO();
|
||||
mjonMsgVO.setSmsTxt(contents);
|
||||
mjonMsgVO.setReserveYn("N");
|
||||
// 시스템 문자발송 번호
|
||||
// mjonMsgVO.setCallFrom("15518011");
|
||||
mjonMsgVO.setCallFrom(callFrom);
|
||||
mjonMsgVO.setCallTo(callTo);
|
||||
|
||||
mjonMsgVO.setUserId("system");
|
||||
|
||||
/*
|
||||
* 본문길이에 따른 단문/장문 구분
|
||||
* 단문 4
|
||||
* 장문 6
|
||||
* 2000자 이상 invalid
|
||||
*/
|
||||
String msgType = MsgSendUtils.getMsgTypeWithByteValidation(new MjonMsgSendVO(), contents);//
|
||||
mjonMsgVO.setMsgType(msgType);
|
||||
|
||||
// MsgDiv - S: 단문, L: 장문, P: 그림
|
||||
if("4".equalsIgnoreCase(msgType)) {
|
||||
mjonMsgVO.setMsgDiv("S");
|
||||
}else if("6".equalsIgnoreCase(msgType)) {
|
||||
mjonMsgVO.setMsgDiv("L");
|
||||
}
|
||||
else { // invalid
|
||||
returnVO.setMsgGroupId("");
|
||||
returnVO.setSendMsgCnt("0"); // 발송 건수 저장
|
||||
returnVO.setSendMsgBlockCnt("0"); // 수신차단 건수 저장
|
||||
return returnVO;
|
||||
}
|
||||
|
||||
// 문자타입별 대표전송사 정보
|
||||
MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
|
||||
mjonMsgVO2 = mjonMsgDAO.selectRepMsgAgetnInfo(mjonMsgVO);
|
||||
// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
|
||||
mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택
|
||||
// 전송금액
|
||||
mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액
|
||||
mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액
|
||||
|
||||
returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO);
|
||||
|
||||
// 시스템 발송 로그
|
||||
SendLogVO sendLogVO = new SendLogVO();
|
||||
// SendType 1:문자로 발송 2:이메일로 발송
|
||||
sendLogVO.setSendId(returnVO.getMsgGroupId());
|
||||
sendLogVO.setSendType("1");
|
||||
sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom());
|
||||
sendLogVO.setReceive(mjonMsgVO.getCallTo());
|
||||
sendLogVO.setContents(contents);
|
||||
sendLogVO.setSendMsgType(sendMsgType);
|
||||
|
||||
mjonMsgDataService.insertSysMsgLog(sendLogVO);
|
||||
|
||||
return returnVO;
|
||||
}
|
||||
|
||||
private Boolean sysMsgTodaySendYn(String callTo) throws Exception {
|
||||
SendLogVO sendLogVO = new SendLogVO();
|
||||
sendLogVO.setReceive(callTo);
|
||||
|
||||
return mjonMsgDataService.selectSysMsgTodaySendYn(sendLogVO);
|
||||
}
|
||||
|
||||
private String selectSmsNotiIfOverFiftySetting() throws Exception {
|
||||
JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
|
||||
return joinSettingVO.getSmsNotiIfOverFifty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -190,7 +190,7 @@ public interface MjonMsgDataService {
|
||||
|
||||
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
|
||||
|
||||
|
||||
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -403,6 +403,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
|
||||
return (Boolean) select("mjonMsgDataDAO.selectSysMsgTodaySendYn",sendLogVO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 다량 데이터를 Batch 처리로 MJ_MSG_DATA 테이블에 INSERT
|
||||
|
||||
@ -4187,6 +4187,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
// 총 발송 건수
|
||||
returnMap.put("resultSts", instTotalCnt);
|
||||
|
||||
//50건이상 문자발송 시 안내메시지 전송
|
||||
try {
|
||||
if(
|
||||
"p".equals(userInfo.getDept()) // 개인회원일 경우에만 발송
|
||||
) {
|
||||
mjonCommon.sendMessagesIfOverFifty(instTotalCnt, mjonMsgVO.getCallFrom());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("sendMessagesIfOverFifty method exception.");
|
||||
}
|
||||
|
||||
// TEST발송 시 발송 후 캐시가 있어야함.
|
||||
returnMap.put("afterCash", priceAndPoint.getBefCash(userId));
|
||||
//
|
||||
@ -5148,4 +5159,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
return returnVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
|
||||
return mjonMsgDataDAO.selectSysMsgTodaySendYn(sendLogVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -18,10 +18,10 @@ public class KmcVO extends ComDefaultVO{
|
||||
private String gender = ""; // 성별
|
||||
private String nation = ""; // 내국인
|
||||
private String name = ""; // 성명
|
||||
private String MName = ""; // 미성년자 성명
|
||||
private String MBirthDay = ""; // 미성년자 생년월일
|
||||
private String MGender = ""; // 미성년자 성별
|
||||
private String MNation = ""; // 미성년자 내외국인
|
||||
// private String MName = ""; // 미성년자 성명
|
||||
// private String MBirthDay = ""; // 미성년자 생년월일
|
||||
// private String MGender = ""; // 미성년자 성별
|
||||
// private String MNation = ""; // 미성년자 내외국인
|
||||
private String result = ""; // 결과값
|
||||
|
||||
private String certMet = ""; // 인증방법
|
||||
@ -41,6 +41,11 @@ public class KmcVO extends ComDefaultVO{
|
||||
private String idx = ""; //본인인증 로그 idx
|
||||
private String dnChk = ""; //본인명의 DN 체크
|
||||
|
||||
private String reserve1 = "";
|
||||
private String reserve2 = "";
|
||||
private String reserve3 = "";
|
||||
private String reserve4 = "";
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
@ -177,30 +182,6 @@ public class KmcVO extends ComDefaultVO{
|
||||
public void setCertNum(String certNum) {
|
||||
this.certNum = certNum;
|
||||
}
|
||||
public String getMName() {
|
||||
return MName;
|
||||
}
|
||||
public void setMName(String mName) {
|
||||
MName = mName;
|
||||
}
|
||||
public String getMBirthDay() {
|
||||
return MBirthDay;
|
||||
}
|
||||
public void setMBirthDay(String mBirthDay) {
|
||||
MBirthDay = mBirthDay;
|
||||
}
|
||||
public String getMGender() {
|
||||
return MGender;
|
||||
}
|
||||
public void setMGender(String mGender) {
|
||||
MGender = mGender;
|
||||
}
|
||||
public String getMNation() {
|
||||
return MNation;
|
||||
}
|
||||
public void setMNation(String mNation) {
|
||||
MNation = mNation;
|
||||
}
|
||||
public String getRecCert() {
|
||||
return recCert;
|
||||
}
|
||||
@ -225,7 +206,30 @@ public class KmcVO extends ComDefaultVO{
|
||||
public void setCertType(String certType) {
|
||||
this.certType = certType;
|
||||
}
|
||||
|
||||
public String getReserve1() {
|
||||
return reserve1;
|
||||
}
|
||||
public void setReserve1(String reserve1) {
|
||||
this.reserve1 = reserve1;
|
||||
}
|
||||
public String getReserve2() {
|
||||
return reserve2;
|
||||
}
|
||||
public void setReserve2(String reserve2) {
|
||||
this.reserve2 = reserve2;
|
||||
}
|
||||
public String getReserve3() {
|
||||
return reserve3;
|
||||
}
|
||||
public void setReserve3(String reserve3) {
|
||||
this.reserve3 = reserve3;
|
||||
}
|
||||
public String getReserve4() {
|
||||
return reserve4;
|
||||
}
|
||||
public void setReserve4(String reserve4) {
|
||||
this.reserve4 = reserve4;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -91,6 +91,7 @@ import itn.let.sym.grd.service.MberGrdVO;
|
||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||
import itn.let.sym.site.service.JoinSettingVO;
|
||||
import itn.let.uat.uia.service.AuthCertVO;
|
||||
import itn.let.uat.uia.web.KmcCertChecker;
|
||||
import itn.let.uss.umt.service.EgovMberManageService;
|
||||
import itn.let.uss.umt.service.EgovUserManageService;
|
||||
import itn.let.uss.umt.service.MberManageVO;
|
||||
@ -165,7 +166,10 @@ public class MjonPayController {
|
||||
EgovSiteManagerService egovSiteManagerService;
|
||||
|
||||
@Resource(name = "mberGrdService")
|
||||
MberGrdService mberGrdService;
|
||||
MberGrdService mberGrdService;
|
||||
|
||||
@Resource(name = "KmcCertChecker")
|
||||
KmcCertChecker kmcCertChecker;
|
||||
|
||||
//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
|
||||
private String[][] sendPayExcelValue ={
|
||||
@ -930,7 +934,7 @@ public class MjonPayController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 나이스페이(PG사 전송화면)
|
||||
* 회원가입 본인인증
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
@ -941,270 +945,10 @@ public class MjonPayController {
|
||||
ModelMap model , @RequestParam Map<String, Object> commandMap,
|
||||
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
||||
|
||||
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
|
||||
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
||||
|
||||
System.out.println("++++++++++++ 세션체크 ::: "+ session.getAttribute("mberSession"));
|
||||
|
||||
String errMessage = ""; //에러메세지
|
||||
|
||||
String rec_cert = ""; // 결과값(암호화)
|
||||
String certNum = ""; // certNum
|
||||
|
||||
rec_cert = request.getParameter("rec_cert").trim();
|
||||
certNum = request.getParameter("certNum").trim();
|
||||
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
kmcVO.setCertNum(certNum);
|
||||
// 파라미터 유효성 검증
|
||||
if( rec_cert.length() == 0 || certNum.length() == 0 ){
|
||||
errMessage = "비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
|
||||
// 변수선언 --------------------------------------------------------------------------------------------------------
|
||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||
k_certNum = certNum;
|
||||
String date = ""; // 요청일시
|
||||
String CI = ""; // 연계정보(CI)
|
||||
String DI = ""; // 중복가입확인정보(DI)
|
||||
String phoneNo = ""; // 휴대폰번호
|
||||
String phoneCorp = ""; // 이동통신사
|
||||
String birthDay = ""; // 생년월일
|
||||
String gender = ""; // 성별
|
||||
String nation = ""; // 내국인
|
||||
String name = ""; // 성명
|
||||
String M_name = ""; // 미성년자 성명
|
||||
String M_birthDay = ""; // 미성년자 생년월일
|
||||
String M_Gender = ""; // 미성년자 성별
|
||||
String M_nation = ""; // 미성년자 내외국인
|
||||
String result = ""; // 결과값
|
||||
|
||||
String certMet = ""; // 인증방법
|
||||
String ip = ""; // ip주소
|
||||
String plusInfo = "";
|
||||
|
||||
String encPara = "";
|
||||
String encMsg1 = "";
|
||||
String encMsg2 = "";
|
||||
String msgChk = "";
|
||||
|
||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||
|
||||
//02. 1차 복호화
|
||||
//수신된 certNum를 이용하여 복호화
|
||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
||||
|
||||
//03. 1차 파싱
|
||||
int inf1 = rec_cert.indexOf("/",0);
|
||||
int inf2 = rec_cert.indexOf("/",inf1+1);
|
||||
|
||||
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
|
||||
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
|
||||
|
||||
//04. 위변조 검증
|
||||
encMsg2 = seed.getMsg(encPara);
|
||||
kmcVO.setEncMsg2(encMsg2);
|
||||
if(encMsg2.equals(encMsg1)){
|
||||
msgChk="Y";
|
||||
}
|
||||
|
||||
if(!"Y".equals(msgChk)) {
|
||||
errMessage = "비정상접근입니다.";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
//05. 2차 복호화
|
||||
rec_cert = seed.getDec(encPara, k_certNum);
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
//06. 2차 파싱
|
||||
int info1 = rec_cert.indexOf("/",0);
|
||||
int info2 = rec_cert.indexOf("/",info1+1);
|
||||
int info3 = rec_cert.indexOf("/",info2+1);
|
||||
int info4 = rec_cert.indexOf("/",info3+1);
|
||||
int info5 = rec_cert.indexOf("/",info4+1);
|
||||
int info6 = rec_cert.indexOf("/",info5+1);
|
||||
int info7 = rec_cert.indexOf("/",info6+1);
|
||||
int info8 = rec_cert.indexOf("/",info7+1);
|
||||
int info9 = rec_cert.indexOf("/",info8+1);
|
||||
int info10 = rec_cert.indexOf("/",info9+1);
|
||||
int info11 = rec_cert.indexOf("/",info10+1);
|
||||
int info12 = rec_cert.indexOf("/",info11+1);
|
||||
int info13 = rec_cert.indexOf("/",info12+1);
|
||||
int info14 = rec_cert.indexOf("/",info13+1);
|
||||
int info15 = rec_cert.indexOf("/",info14+1);
|
||||
int info16 = rec_cert.indexOf("/",info15+1);
|
||||
int info17 = rec_cert.indexOf("/",info16+1);
|
||||
int info18 = rec_cert.indexOf("/",info17+1);
|
||||
|
||||
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
|
||||
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
|
||||
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
|
||||
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
|
||||
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
|
||||
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
|
||||
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
|
||||
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
|
||||
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
|
||||
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
|
||||
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
|
||||
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
|
||||
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
|
||||
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
|
||||
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
|
||||
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
|
||||
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
|
||||
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
|
||||
|
||||
//07. CI, DI 복호화
|
||||
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
|
||||
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
|
||||
|
||||
if("Y".equals(result)) {
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
String regex = "";
|
||||
if( certNum.length() == 0 || certNum.length() > 40){
|
||||
errMessage = "요청번호 비정상.";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( date.length() != 14 || !paramChk(regex, date) ){
|
||||
errMessage = "요청일시";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
|
||||
errMessage = "본인인증방법 비정상" + certMet;
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
|
||||
errMessage = "휴대폰번호 비정상" ;
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
|
||||
errMessage = "이동통신사 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
|
||||
errMessage = "생년월일 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( gender.length() != 1 || !paramChk(regex, gender) ){
|
||||
errMessage = "성별 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( nation.length() != 1 || !paramChk(regex, nation) ){
|
||||
errMessage = "내/외국인 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
||||
if( name.length() > 60 || !paramChk(regex, name) ){
|
||||
errMessage = "성명 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if( result.length() != 1 || !paramChk(regex, result) ){
|
||||
errMessage = "결과값 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-?.,-]*";
|
||||
if( M_name.length() != 0 ){
|
||||
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
|
||||
errMessage = "미성년자 성명 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( M_birthDay.length() != 0 ){
|
||||
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
|
||||
errMessage = "미성년자 생년월일 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( M_Gender.length() != 0 ){
|
||||
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
|
||||
errMessage = "미성년자 성별 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if( M_nation.length() != 0 ){
|
||||
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
|
||||
errMessage = "미성년자 내/외국인 비정상";
|
||||
return returnPage(model , errMessage , kmcVO) ;
|
||||
}
|
||||
}
|
||||
|
||||
//본인인증 결과 내용 저장하기.
|
||||
/*System.out.println("+++++++++++++ getCertNum ::: "+kmcVO.getCertNum());
|
||||
System.out.println("+++++++++++++ getDate ::: "+kmcVO.getDate());
|
||||
System.out.println("+++++++++++++ getDI ::: "+kmcVO.getDI());
|
||||
System.out.println("+++++++++++++ getPhoneNo ::: "+kmcVO.getPhoneNo());
|
||||
System.out.println("+++++++++++++ getNation ::: "+kmcVO.getNation());
|
||||
System.out.println("+++++++++++++ getName ::: "+kmcVO.getName());
|
||||
System.out.println("+++++++++++++ getResult ::: "+kmcVO.getResult());
|
||||
System.out.println("+++++++++++++ getCertMet ::: "+kmcVO.getCertMet());
|
||||
System.out.println("+++++++++++++ getIp ::: "+kmcVO.getIp());*/
|
||||
|
||||
//KMC 본인인증 정보를 세션에 담아준다.
|
||||
/*AuthCertVO certVO = new AuthCertVO();
|
||||
certVO.setCertNum(kmcVO.getCertNum());
|
||||
certVO.setCertDate(kmcVO.getDate());
|
||||
certVO.setCertDi(kmcVO.getDI());
|
||||
certVO.setCertPhone(kmcVO.getPhoneNo());
|
||||
certVO.setCertNation(kmcVO.getNation());
|
||||
certVO.setCertName(kmcVO.getName());
|
||||
certVO.setCertResult(kmcVO.getResult());
|
||||
certVO.setCertType("KMC문자인증");
|
||||
certVO.setCertIpaddr(kmcVO.getIp());
|
||||
certVO.setBirthDay(kmcVO.getBirthDay());
|
||||
certVO.setSexdstnCode(kmcVO.getGender());*/
|
||||
|
||||
/*request.getSession().setAttribute("AuthKmcCertVO", certVO);*/
|
||||
|
||||
/*System.out.println("++++++++++++ 세션체크22 ::: "+(MberManageVO) session.getAttribute("mberSession"));*/
|
||||
|
||||
//KMC 본인인증 로그 insert
|
||||
AuthCertVO certVO = new AuthCertVO();
|
||||
certVO.setMberId(kmcVO.getPlusInfo());
|
||||
certVO.setCertNum(kmcVO.getCertNum());
|
||||
certVO.setCertDate(kmcVO.getDate());
|
||||
certVO.setCertDi(kmcVO.getDI());
|
||||
certVO.setCertPhone(kmcVO.getPhoneNo());
|
||||
certVO.setCertNation(kmcVO.getNation());
|
||||
certVO.setCertName(kmcVO.getName());
|
||||
certVO.setCertResult(kmcVO.getResult());
|
||||
certVO.setCertType("KMC_회원가입 인증");
|
||||
certVO.setCertIpaddr(kmcVO.getIp());
|
||||
certVO.setBirthDay(kmcVO.getBirthDay());
|
||||
certVO.setSexdstnCode(kmcVO.getGender());
|
||||
|
||||
//디비 테이블에 저장하기
|
||||
mberManageService.insertCertInfoLog(certVO);
|
||||
//kmc 본인인증 결과처리
|
||||
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||
//kmc 본인인증 로그 처리
|
||||
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_회원가입 인증");
|
||||
|
||||
kmcVO.setIdx(certVO.getIdx()); //본인인증 로그 Idx - 로그 insert 후 idx selectKey
|
||||
model.addAttribute("kmcVO", kmcVO);
|
||||
@ -6179,5 +5923,6 @@ public class MjonPayController {
|
||||
|
||||
return p_response;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -65,6 +65,7 @@ public class JoinSettingVO {
|
||||
private String slackNoti; //관리자 SLACK 알림 여부
|
||||
private String smishingNoti; //첫결제(카드제외) 스미싱의심 알림 여부
|
||||
private String holiSmishingNoti; //야간 스미싱알림 여부
|
||||
private String smsNotiIfOverFifty; //50건이상 문자발송 시 안내문자 발송
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -121,5 +121,4 @@ public interface EgovLoginService {
|
||||
//비밀번호 실패 횟수 조회
|
||||
public LoginVO selectPassMiss(LoginVO vo) throws Exception;
|
||||
|
||||
public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO);
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.let.mjo.pay.service.KmcVO;
|
||||
import itn.let.uat.uia.service.AuthCertVO;
|
||||
import itn.let.uat.uia.service.EgovLoginService;
|
||||
import itn.let.uss.umt.service.UserManageVO;
|
||||
import itn.let.utl.fcc.service.EgovNumberUtil;
|
||||
@ -318,240 +319,6 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements
|
||||
return loginDAO.selectPassMiss(vo);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO) {
|
||||
|
||||
|
||||
|
||||
String rec_cert = request.getParameter("rec_cert").trim();
|
||||
String certNum = request.getParameter("certNum").trim();
|
||||
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
kmcVO.setCertNum(certNum);
|
||||
// 파라미터 유효성 검증
|
||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
||||
kmcVO.setErrMessage("비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
// 변수선언
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||
k_certNum = certNum;
|
||||
String date = ""; // 요청일시
|
||||
String CI = ""; // 연계정보(CI)
|
||||
String DI = ""; // 중복가입확인정보(DI)
|
||||
String phoneNo = ""; // 휴대폰번호
|
||||
String phoneCorp = ""; // 이동통신사
|
||||
String birthDay = ""; // 생년월일
|
||||
String gender = ""; // 성별
|
||||
String nation = ""; // 내국인
|
||||
String name = ""; // 성명
|
||||
String M_name = ""; // 미성년자 성명
|
||||
String M_birthDay = ""; // 미성년자 생년월일
|
||||
String M_Gender = ""; // 미성년자 성별
|
||||
String M_nation = ""; // 미성년자 내외국인
|
||||
String result = ""; // 결과값
|
||||
|
||||
String certMet = ""; // 인증방법
|
||||
String ip = ""; // ip주소
|
||||
String plusInfo = "";
|
||||
|
||||
String encPara = "";
|
||||
String encMsg1 = "";
|
||||
String encMsg2 = "";
|
||||
String msgChk = "";
|
||||
|
||||
IcertSecuManager seed = new IcertSecuManager();
|
||||
|
||||
// 02. 1차 복호화
|
||||
// 수신된 certNum를 이용하여 복호화
|
||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
||||
|
||||
// 03. 1차 파싱
|
||||
int inf1 = rec_cert.indexOf("/", 0);
|
||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
||||
|
||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
||||
|
||||
// 04. 위변조 검증
|
||||
encMsg2 = seed.getMsg(encPara);
|
||||
kmcVO.setEncMsg2(encMsg2);
|
||||
if (encMsg2.equals(encMsg1)) {
|
||||
msgChk = "Y";
|
||||
}
|
||||
|
||||
if (!"Y".equals(msgChk)) {
|
||||
kmcVO.setErrMessage("비정상접근입니다.");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
// 05. 2차 복호화
|
||||
rec_cert = seed.getDec(encPara, k_certNum);
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
// 06. 2차 파싱
|
||||
int info1 = rec_cert.indexOf("/", 0);
|
||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
||||
|
||||
certNum = rec_cert.substring(0, info1);
|
||||
kmcVO.setCertNum(certNum);
|
||||
date = rec_cert.substring(info1 + 1, info2);
|
||||
kmcVO.setDate(date);
|
||||
CI = rec_cert.substring(info2 + 1, info3);
|
||||
kmcVO.setCI(CI);
|
||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
||||
kmcVO.setPhoneNo(phoneNo);
|
||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
||||
kmcVO.setPhoneCorp(phoneCorp);
|
||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
||||
kmcVO.setBirthDay(birthDay);
|
||||
gender = rec_cert.substring(info6 + 1, info7);
|
||||
kmcVO.setGender(gender);
|
||||
nation = rec_cert.substring(info7 + 1, info8);
|
||||
kmcVO.setNation(nation);
|
||||
name = rec_cert.substring(info8 + 1, info9);
|
||||
kmcVO.setName(name);
|
||||
result = rec_cert.substring(info9 + 1, info10);
|
||||
kmcVO.setResult(result);
|
||||
certMet = rec_cert.substring(info10 + 1, info11);
|
||||
kmcVO.setCertMet(certMet);
|
||||
ip = rec_cert.substring(info11 + 1, info12);
|
||||
kmcVO.setIp(ip);
|
||||
M_name = rec_cert.substring(info12 + 1, info13);
|
||||
kmcVO.setMName(M_name);
|
||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
||||
kmcVO.setMBirthDay(M_birthDay);
|
||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
||||
kmcVO.setMGender(M_Gender);
|
||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
||||
kmcVO.setMNation(M_nation);
|
||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
||||
kmcVO.setPlusInfo(plusInfo);
|
||||
DI = rec_cert.substring(info17 + 1, info18);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
// 07. CI, DI 복호화
|
||||
CI = seed.getDec(CI, k_certNum);
|
||||
kmcVO.setCI(CI);
|
||||
DI = seed.getDec(DI, k_certNum);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
if ("Y".equals(result)) {
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
String regex = "";
|
||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
||||
kmcVO.setErrMessage("요청번호 비정상.");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (date.length() != 14 || !this.paramChk(regex, date)) {
|
||||
kmcVO.setErrMessage("요청일시");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (certMet.length() != 1 || !this.paramChk(regex, certMet)) {
|
||||
kmcVO.setErrMessage("본인인증방법 비정상" + certMet);
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !this.paramChk(regex, phoneNo)) {
|
||||
kmcVO.setErrMessage("휴대폰번호 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (phoneCorp.length() != 3 || !this.paramChk(regex, phoneCorp)) {
|
||||
kmcVO.setErrMessage("이동통신사 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (birthDay.length() != 8 || !this.paramChk(regex, birthDay)) {
|
||||
kmcVO.setErrMessage("생년월일 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (gender.length() != 1 || !this.paramChk(regex, gender)) {
|
||||
kmcVO.setErrMessage("성별 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (nation.length() != 1 || !this.paramChk(regex, nation)) {
|
||||
kmcVO.setErrMessage("내/외국인 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
||||
if (name.length() > 60 || !this.paramChk(regex, name)) {
|
||||
kmcVO.setErrMessage("성명 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (result.length() != 1 || !this.paramChk(regex, result)) {
|
||||
kmcVO.setErrMessage("결과값 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-?.,-]*";
|
||||
if (M_name.length() != 0) {
|
||||
if (M_name.length() > 60 || !this.paramChk(regex, M_name)) {
|
||||
kmcVO.setErrMessage("미성년자 성명 비정상");
|
||||
return kmcVO;
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_birthDay.length() != 0) {
|
||||
if (M_birthDay.length() != 8 || !this.paramChk(regex, M_birthDay)) {
|
||||
kmcVO.setErrMessage("미성년자 생년월일 비정상");
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_Gender.length() != 0) {
|
||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
||||
kmcVO.setErrMessage("미성년자 성별 비정상");
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_nation.length() != 0) {
|
||||
if (M_nation.length() != 1 || !this.paramChk(regex, M_nation)) {
|
||||
kmcVO.setErrMessage("미성년자 내/외국인 비정상");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
|
||||
public Boolean paramChk(String patn, String param) {
|
||||
Pattern pattern = Pattern.compile(patn);
|
||||
Matcher matcher = pattern.matcher(param);
|
||||
|
||||
@ -253,7 +253,7 @@ public class EgovLoginController {
|
||||
private CertIpService certIpService;
|
||||
|
||||
@Resource(name = "KmcCertChecker")
|
||||
private KmcCertChecker kmcCertCheck;
|
||||
private KmcCertChecker kmcCertChecker;
|
||||
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class);
|
||||
@ -336,7 +336,7 @@ public class EgovLoginController {
|
||||
|
||||
MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO();
|
||||
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do");
|
||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
||||
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||
|
||||
model.addAttribute("tr_cert", certVO.getTr_cert());
|
||||
model.addAttribute("tr_url", certVO.getTr_url());
|
||||
@ -385,7 +385,7 @@ public class EgovLoginController {
|
||||
mberCertPhoneVO.setNation(mberManageVO.getNationality());
|
||||
mberCertPhoneVO.setBirthDay(mberManageVO.getBirth());
|
||||
|
||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
||||
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||
|
||||
// AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do",
|
||||
// mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(),
|
||||
@ -4035,7 +4035,7 @@ public class EgovLoginController {
|
||||
}
|
||||
mberCertPhoneVO.setPlusInfo(plusInfo);
|
||||
|
||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
||||
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||
|
||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||
@ -4060,22 +4060,26 @@ public class EgovLoginController {
|
||||
*/
|
||||
|
||||
@RequestMapping("/web/cop/kmc/authRequestFindIdPwAjax.do")
|
||||
public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
|
||||
public String authRequestFindIdPwAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
|
||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
||||
RedirectAttributes redirectAttributes) throws Exception {
|
||||
|
||||
KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||
// KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||
//kmc 본인인증 결과처리
|
||||
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||
//kmc 본인인증 로그 처리
|
||||
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
|
||||
|
||||
String msg = "";
|
||||
if (!findIdKmcCheck(kmcRVO.getDI(), kmcRVO.getName(), kmcRVO.getPhoneNo())) {
|
||||
if (!findIdKmcCheck(kmcVO.getDI(), kmcVO.getName(), kmcVO.getPhoneNo())) {
|
||||
msg = "일치하는 정보가 없습니다.";
|
||||
redirectAttributes.addFlashAttribute("message", msg);
|
||||
return "redirect:/web/user/findUserId.do";
|
||||
}
|
||||
|
||||
kmcRVO.setCertType("KMC_아이디패스워드찾기");
|
||||
// 디비 테이블에 저장하기
|
||||
mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||
// kmcRVO.setCertType("KMC_아이디패스워드찾기");
|
||||
// // 디비 테이블에 저장하기
|
||||
// mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||
|
||||
model.addAttribute("kmcVO", kmcVO);
|
||||
return "web/login/findUserIdKmcReqPage";
|
||||
@ -4092,18 +4096,24 @@ public class EgovLoginController {
|
||||
* @discription 관리자 로그인 DN 값 최초 등록
|
||||
*/
|
||||
@RequestMapping("/web/cop/kmc/authRequestSelfLoginAjax.do")
|
||||
public String authRequestSelfLoginAjax(HttpServletRequest request, ModelMap model,
|
||||
public String authRequestSelfLoginAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
|
||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
||||
RedirectAttributes redirectAttributes, HttpSession session) throws Exception {
|
||||
|
||||
UserManageVO userManageVO = new UserManageVO();
|
||||
|
||||
KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||
// KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||
|
||||
//kmc 본인인증 결과처리
|
||||
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||
//kmc 본인인증 로그 처리
|
||||
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
|
||||
|
||||
|
||||
userManageVO.setCrtfcDnValue(kmcRVO.getDI());
|
||||
userManageVO.setEmplyrNm(kmcRVO.getName());
|
||||
userManageVO.setEmplyrId(kmcRVO.getPlusInfo().split(",,,")[0]);
|
||||
userManageVO.setPassword(kmcRVO.getPlusInfo().split(",,,")[1]);
|
||||
userManageVO.setCrtfcDnValue(kmcVO.getDI());
|
||||
userManageVO.setEmplyrNm(kmcVO.getName());
|
||||
userManageVO.setEmplyrId(kmcVO.getPlusInfo().split(",,,")[0]);
|
||||
userManageVO.setPassword(kmcVO.getPlusInfo().split(",,,")[1]);
|
||||
|
||||
userManageService.updateCrtfcDnValue(userManageVO);
|
||||
|
||||
@ -4121,20 +4131,20 @@ public class EgovLoginController {
|
||||
e.printStackTrace();
|
||||
// TODO: handle exception
|
||||
}
|
||||
kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
|
||||
// 디비 테이블에 저장하기
|
||||
|
||||
try {
|
||||
mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("!!!!!!!!!!!!!!!!!");
|
||||
e.printStackTrace();
|
||||
// TODO: handle exception
|
||||
}
|
||||
// kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
|
||||
// // 디비 테이블에 저장하기
|
||||
//
|
||||
// try {
|
||||
// mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||
//
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("!!!!!!!!!!!!!!!!!");
|
||||
// e.printStackTrace();
|
||||
// // TODO: handle exception
|
||||
// }
|
||||
|
||||
|
||||
model.addAttribute("kmcVO", kmcRVO);
|
||||
model.addAttribute("kmcVO", kmcVO);
|
||||
|
||||
System.out.println("======================================");
|
||||
model.addAttribute("userManageVO", userManageVO);
|
||||
@ -5425,7 +5435,7 @@ public class EgovLoginController {
|
||||
mberCertPhoneVO.setNation(KMCInfoVO.getNationality());
|
||||
mberCertPhoneVO.setPlusInfo(loginVO.getId());
|
||||
|
||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
||||
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||
|
||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||
@ -5446,245 +5456,19 @@ public class EgovLoginController {
|
||||
*
|
||||
*/
|
||||
@RequestMapping("/web/cop/kmc/insertIPAjax.do")
|
||||
public String insertIPAjax(HttpServletRequest request, ModelMap model, @RequestParam Map<String, Object> commandMap,
|
||||
public String insertIPAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap,
|
||||
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
||||
|
||||
String errMessage = ""; // 에러메세지
|
||||
|
||||
String rec_cert = ""; // 결과값(암호화)
|
||||
String certNum = ""; // certNum
|
||||
|
||||
rec_cert = request.getParameter("rec_cert").trim();
|
||||
certNum = request.getParameter("certNum").trim();
|
||||
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
kmcVO.setCertNum(certNum);
|
||||
// 파라미터 유효성 검증
|
||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
||||
errMessage = "비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
// 변수선언
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||
k_certNum = certNum;
|
||||
String date = ""; // 요청일시
|
||||
String CI = ""; // 연계정보(CI)
|
||||
String DI = ""; // 중복가입확인정보(DI)
|
||||
String phoneNo = ""; // 휴대폰번호
|
||||
String phoneCorp = ""; // 이동통신사
|
||||
String birthDay = ""; // 생년월일
|
||||
String gender = ""; // 성별
|
||||
String nation = ""; // 내국인
|
||||
String name = ""; // 성명
|
||||
String M_name = ""; // 미성년자 성명
|
||||
String M_birthDay = ""; // 미성년자 생년월일
|
||||
String M_Gender = ""; // 미성년자 성별
|
||||
String M_nation = ""; // 미성년자 내외국인
|
||||
String result = ""; // 결과값
|
||||
|
||||
String certMet = ""; // 인증방법
|
||||
String ip = ""; // ip주소
|
||||
String plusInfo = "";
|
||||
|
||||
String encPara = "";
|
||||
String encMsg1 = "";
|
||||
String encMsg2 = "";
|
||||
String msgChk = "";
|
||||
|
||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||
|
||||
// 02. 1차 복호화
|
||||
// 수신된 certNum를 이용하여 복호화
|
||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
||||
|
||||
// 03. 1차 파싱
|
||||
int inf1 = rec_cert.indexOf("/", 0);
|
||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
||||
|
||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
||||
|
||||
// 04. 위변조 검증
|
||||
encMsg2 = seed.getMsg(encPara);
|
||||
kmcVO.setEncMsg2(encMsg2);
|
||||
if (encMsg2.equals(encMsg1)) {
|
||||
msgChk = "Y";
|
||||
}
|
||||
|
||||
if (!"Y".equals(msgChk)) {
|
||||
errMessage = "비정상접근입니다.";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
// 05. 2차 복호화
|
||||
rec_cert = seed.getDec(encPara, k_certNum);
|
||||
kmcVO.setRecCert(rec_cert);
|
||||
// 06. 2차 파싱
|
||||
int info1 = rec_cert.indexOf("/", 0);
|
||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
||||
|
||||
certNum = rec_cert.substring(0, info1);
|
||||
kmcVO.setCertNum(certNum);
|
||||
date = rec_cert.substring(info1 + 1, info2);
|
||||
kmcVO.setDate(date);
|
||||
CI = rec_cert.substring(info2 + 1, info3);
|
||||
kmcVO.setCI(CI);
|
||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
||||
kmcVO.setPhoneNo(phoneNo);
|
||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
||||
kmcVO.setPhoneCorp(phoneCorp);
|
||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
||||
kmcVO.setBirthDay(birthDay);
|
||||
gender = rec_cert.substring(info6 + 1, info7);
|
||||
kmcVO.setGender(gender);
|
||||
nation = rec_cert.substring(info7 + 1, info8);
|
||||
kmcVO.setNation(nation);
|
||||
name = rec_cert.substring(info8 + 1, info9);
|
||||
kmcVO.setName(name);
|
||||
result = rec_cert.substring(info9 + 1, info10);
|
||||
kmcVO.setResult(result);
|
||||
certMet = rec_cert.substring(info10 + 1, info11);
|
||||
kmcVO.setCertMet(certMet);
|
||||
ip = rec_cert.substring(info11 + 1, info12);
|
||||
kmcVO.setIp(ip);
|
||||
M_name = rec_cert.substring(info12 + 1, info13);
|
||||
kmcVO.setMName(M_name);
|
||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
||||
kmcVO.setMBirthDay(M_birthDay);
|
||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
||||
kmcVO.setMGender(M_Gender);
|
||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
||||
kmcVO.setMNation(M_nation);
|
||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
||||
kmcVO.setPlusInfo(plusInfo);
|
||||
DI = rec_cert.substring(info17 + 1, info18);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
// 07. CI, DI 복호화
|
||||
CI = seed.getDec(CI, k_certNum);
|
||||
kmcVO.setCI(CI);
|
||||
DI = seed.getDec(DI, k_certNum);
|
||||
kmcVO.setDI(DI);
|
||||
|
||||
if ("Y".equals(result)) {
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
String regex = "";
|
||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
||||
errMessage = "요청번호 비정상.";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (date.length() != 14 || !paramChk(regex, date)) {
|
||||
errMessage = "요청일시";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (certMet.length() != 1 || !paramChk(regex, certMet)) {
|
||||
errMessage = "본인인증방법 비정상" + certMet;
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
|
||||
errMessage = "휴대폰번호 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
|
||||
errMessage = "이동통신사 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
|
||||
errMessage = "생년월일 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (gender.length() != 1 || !paramChk(regex, gender)) {
|
||||
errMessage = "성별 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (nation.length() != 1 || !paramChk(regex, nation)) {
|
||||
errMessage = "내/외국인 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
||||
if (name.length() > 60 || !paramChk(regex, name)) {
|
||||
errMessage = "성명 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[A-Z]*";
|
||||
if (result.length() != 1 || !paramChk(regex, result)) {
|
||||
errMessage = "결과값 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
|
||||
regex = "[\\sA-Za-z가-?.,-]*";
|
||||
if (M_name.length() != 0) {
|
||||
if (M_name.length() > 60 || !paramChk(regex, M_name)) {
|
||||
errMessage = "미성년자 성명 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_birthDay.length() != 0) {
|
||||
if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
|
||||
errMessage = "미성년자 생년월일 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_Gender.length() != 0) {
|
||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
||||
errMessage = "미성년자 성별 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
|
||||
regex = "[0-9]*";
|
||||
if (M_nation.length() != 0) {
|
||||
if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
|
||||
errMessage = "미성년자 내/외국인 비정상";
|
||||
return returnPage(model, errMessage, kmcVO);
|
||||
}
|
||||
}
|
||||
//kmc 본인인증 결과처리
|
||||
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||
//kmc 본인인증 로그 처리
|
||||
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "IP등록");
|
||||
|
||||
LoginVO loginVO = new LoginVO();
|
||||
loginVO.setId(plusInfo);
|
||||
loginVO.setId(kmcVO.getPlusInfo());
|
||||
|
||||
loginVO = loginService.selectKMCInfo(loginVO);
|
||||
String userIp = EgovClntInfo.getClntIP(request);
|
||||
loginVO.setIp(ip);
|
||||
loginVO.setIp(kmcVO.getIp());
|
||||
|
||||
loginService.insertMberIp(loginVO);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,29 +1,44 @@
|
||||
package itn.let.uat.uia.web;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
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 javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.servlet.FlashMap;
|
||||
import org.springframework.web.servlet.FlashMapManager;
|
||||
import org.springframework.web.servlet.support.RequestContextUtils;
|
||||
|
||||
import com.icert.comm.secu.IcertSecuManager;
|
||||
|
||||
import itn.let.cert.phone.service.CertPhoneService;
|
||||
import itn.let.cert.phone.service.MberCertPhoneVO;
|
||||
import itn.let.mjo.pay.service.KmcVO;
|
||||
import itn.let.uat.uia.service.AuthCertVO;
|
||||
import itn.let.uss.umt.service.MberManageVO;
|
||||
import itn.let.uss.umt.service.EgovMberManageService;
|
||||
|
||||
@Component("KmcCertChecker")
|
||||
public class KmcCertChecker {
|
||||
|
||||
@Resource(name = "CertPhoneService")
|
||||
private CertPhoneService certPhoneService;
|
||||
|
||||
@Resource(name = "mberManageService")
|
||||
private EgovMberManageService mberManageService;
|
||||
|
||||
//회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용
|
||||
public AuthCertVO authCertCheck(
|
||||
@ -64,11 +79,13 @@ public class KmcCertChecker {
|
||||
String tr_add = "N"; // IFrame사용여부
|
||||
|
||||
//01. 한국모바일인증(주) 암호화 모듈 선언
|
||||
IcertSecuManager seed = new IcertSecuManager();
|
||||
// IcertSecuManager seed = new IcertSecuManager();
|
||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||
|
||||
//02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화)
|
||||
String enc_tr_cert = "";
|
||||
tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar;
|
||||
// tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"///////"+ plusInfo +"/"+ extendVar;
|
||||
enc_tr_cert = seed.getEnc(tr_cert, "");
|
||||
|
||||
//03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC)
|
||||
@ -87,7 +104,315 @@ public class KmcCertChecker {
|
||||
return authCertVO;
|
||||
}
|
||||
|
||||
public KmcVO authCertResult(
|
||||
HttpServletRequest request
|
||||
, HttpServletResponse response
|
||||
, ModelMap model
|
||||
) throws IOException {
|
||||
|
||||
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
|
||||
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
||||
|
||||
KmcVO kmcVO = new KmcVO(); //return VO
|
||||
|
||||
// 변수 -------------------------------------------------------------------------------------------------------------
|
||||
String api_token = ""; // 토큰값(암호화)
|
||||
String api_certNum = ""; // 요청번호(암호화)
|
||||
|
||||
String message = ""; // JSON 전문
|
||||
String result_cd = ""; // JSON 결과코드
|
||||
String result_msg = ""; // JSON 결과-상세
|
||||
String strResult = ""; // JSON 결과
|
||||
String apiRecCert = ""; // JSON 전송 데이터
|
||||
String apiCertNum = ""; // JSON 전송 데이터
|
||||
|
||||
String rec_cert = ""; // 결과수신DATA
|
||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||
String certNum = ""; // 요청번호
|
||||
String date = ""; // 요청일시
|
||||
String CI = ""; // 연계정보(CI)
|
||||
String DI = ""; // 중복가입확인정보(DI)
|
||||
String phoneNo = ""; // 휴대폰번호
|
||||
String phoneCorp = ""; // 이동통신사
|
||||
String birth = ""; // 생년월일
|
||||
String gender = ""; // 성별
|
||||
String nation = ""; // 내국인
|
||||
String name = ""; // 성명
|
||||
String reserve1 = ""; // 예비필드
|
||||
String reserve2 = ""; // 예비필드
|
||||
String reserve3 = ""; // 예비필드
|
||||
String reserve4 = ""; // 예비필드
|
||||
String result = ""; // 결과값
|
||||
|
||||
String certMet = ""; // 인증방법
|
||||
String ip = ""; // ip주소
|
||||
String plusInfo = "";
|
||||
|
||||
String encPara = "";
|
||||
String encMsg1 = "";
|
||||
String encMsg2 = "";
|
||||
String msgChk = "";
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
try{
|
||||
// Parameter 수신 --------------------------------------------------------------------
|
||||
api_token = request.getParameter("apiToken").trim();
|
||||
api_certNum = request.getParameter("certNum");
|
||||
|
||||
// 파라미터 유효성 검증
|
||||
if( api_token.length() == 0 ){
|
||||
goErrorPage("토큰값 비정상", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
if( api_certNum.length() == 0 ){
|
||||
goErrorPage("요청번호 비정상", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
//현재시각 세팅(YYYYMMDDHI24MISS)
|
||||
Calendar today = Calendar.getInstance();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String api_date = sdf.format(today.getTime());
|
||||
|
||||
//01. 암호화 모듈 (jar) Loading
|
||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||
|
||||
//api_token, api_certNum 복호화
|
||||
api_token = seed.getDec(api_token, "");
|
||||
api_certNum = seed.getDec(api_certNum, "");
|
||||
|
||||
// 파라미터 유효성 검증
|
||||
if( api_token.length() == 0 ){
|
||||
goErrorPage("토큰값 비정상(복호화 후)", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
if( api_certNum.length() == 0 ){
|
||||
goErrorPage("요청번호 비정상(복호화 후)", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
// 1. URL 설정
|
||||
String serverURL = "https://www.kmcert.com/kmcis/api/kmcisToken_api.jsp";
|
||||
|
||||
// 2. 연결 생성
|
||||
URL url = new URL(serverURL);
|
||||
|
||||
// 3. HttpURLConnection 객체 생성.
|
||||
HttpURLConnection con = null;
|
||||
OutputStream wr = null;
|
||||
BufferedReader bufferedReader = null;
|
||||
|
||||
// 4. URL 연결 (웹페이지 URL 연결.)
|
||||
con = (HttpURLConnection)url.openConnection();
|
||||
|
||||
con.setConnectTimeout(20000); // TimeOut 시간 (서버 접속시 연결 시간 - 20초)
|
||||
con.setReadTimeout(20000); // TimeOut 시간 (Read시 연결 시간 - 20초)
|
||||
con.setDoOutput(true); // OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
|
||||
|
||||
con.setRequestProperty("Content-Type", "application/json;charset=utf-8"); // 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
|
||||
con.setRequestProperty("Accept", "application/json"); // 서버 Response Data를 JSON 형식의 타입으로 요청.
|
||||
con.setRequestMethod("POST"); // 요청 방식 선택 (POST)
|
||||
|
||||
// 5. JSON 전문 구성
|
||||
|
||||
JSONObject jsonData = new JSONObject();
|
||||
|
||||
jsonData.put("apiToken", api_token);
|
||||
jsonData.put("apiDate", api_date);
|
||||
|
||||
message = jsonData.toString();
|
||||
|
||||
// 6. 전송
|
||||
// Request Body에 Data를 담기위해 OutputStream 객체를 생성.
|
||||
wr = con.getOutputStream();
|
||||
|
||||
// Request Body에 Data 셋팅.(한글깨짐 방지를 위해 utf-8인코딩 처리
|
||||
wr.write(message.getBytes("utf-8"));
|
||||
wr.flush();
|
||||
wr.close();
|
||||
|
||||
// 실제 서버로 Request 요청 하는 부분. (응답 코드를 받는다. 200 성공, 나머지 에러)
|
||||
int responseCode = con.getResponseCode();
|
||||
|
||||
// 4. 결과 수신
|
||||
if(responseCode == 200){
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
|
||||
}else{
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));
|
||||
}
|
||||
|
||||
if(bufferedReader != null){
|
||||
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
String line = "";
|
||||
|
||||
while((line = bufferedReader.readLine()) != null){
|
||||
stringBuilder.append(line);
|
||||
}
|
||||
bufferedReader.close();
|
||||
|
||||
String stringRet = stringBuilder.toString();
|
||||
|
||||
// 5. 넘어온 문자열을 JSON 객체로 변환
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
|
||||
//JSON데이터를 넣어 JSON Object 로 만들어 준다.
|
||||
JSONObject jsonObj = (JSONObject)jsonParser.parse(stringRet);
|
||||
|
||||
// 6. JSON 객체에서 데이터 가져오기
|
||||
|
||||
if(jsonObj.get("result_cd") != null){
|
||||
result_cd = jsonObj.get("result_cd").toString();
|
||||
if("APR01".equals(result_cd)){
|
||||
//통신성공
|
||||
strResult = "Y";
|
||||
rec_cert = jsonObj.get("apiRecCert").toString();
|
||||
k_certNum = jsonObj.get("apiCertNum").toString();
|
||||
}else if("APR02".equals(result_cd)){
|
||||
//실패 - Token Expire
|
||||
strResult = "N";
|
||||
result_msg = "실패 - Token Expire";
|
||||
}else if("APR03".equals(result_cd)){
|
||||
//실패 - Token Not Found
|
||||
strResult = "N";
|
||||
result_msg = "실패 - Token Not Found";
|
||||
}else if("APR04".equals(result_cd)){
|
||||
//실패 - API 요청일시 길이 오류
|
||||
strResult = "N";
|
||||
result_msg = "실패 - API 요청일시 길이 오류";
|
||||
}else if("APR05".equals(result_cd)){
|
||||
//실패 - API 토큰 길이 오류
|
||||
strResult = "N";
|
||||
result_msg = "실패 - API 토큰 길이 오류";
|
||||
}else if("APR06".equals(result_cd)){
|
||||
//실패 - 결과전송 재요청(3회 제한)
|
||||
strResult = "N";
|
||||
result_msg = "실패 - 결과전송 재요청(3회 제한)";
|
||||
}
|
||||
}else{
|
||||
//JSON 결과코드 에러
|
||||
strResult = "F";
|
||||
}
|
||||
}else{ //timeout except 처리
|
||||
strResult = "F";
|
||||
}
|
||||
|
||||
// 파라미터 유효성 검증
|
||||
if(!strResult.equals("Y")){
|
||||
goErrorPage("결과값 비정상, 결과코드["+result_cd+"], "+"상세내용["+result_msg+"]", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
//02. 1차 복호화
|
||||
rec_cert = seed.getDec(rec_cert, "");
|
||||
|
||||
//03. 1차 파싱
|
||||
int inf1 = rec_cert.indexOf("/",0);
|
||||
int inf2 = rec_cert.indexOf("/",inf1+1);
|
||||
|
||||
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
|
||||
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
|
||||
|
||||
//04. 위변조 검증
|
||||
encMsg2 = seed.getMsg(encPara);
|
||||
|
||||
if(encMsg2.equals(encMsg1)){
|
||||
msgChk="Y";
|
||||
}
|
||||
|
||||
if(msgChk.equals("N")){
|
||||
goErrorPage("비정상적인 접근입니다.!!", request, response);
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
//05. 2차 복호화
|
||||
rec_cert = seed.getDec(encPara, "");
|
||||
|
||||
//06. 2차 파싱
|
||||
int info1 = rec_cert.indexOf("/",0);
|
||||
int info2 = rec_cert.indexOf("/",info1+1);
|
||||
int info3 = rec_cert.indexOf("/",info2+1);
|
||||
int info4 = rec_cert.indexOf("/",info3+1);
|
||||
int info5 = rec_cert.indexOf("/",info4+1);
|
||||
int info6 = rec_cert.indexOf("/",info5+1);
|
||||
int info7 = rec_cert.indexOf("/",info6+1);
|
||||
int info8 = rec_cert.indexOf("/",info7+1);
|
||||
int info9 = rec_cert.indexOf("/",info8+1);
|
||||
int info10 = rec_cert.indexOf("/",info9+1);
|
||||
int info11 = rec_cert.indexOf("/",info10+1);
|
||||
int info12 = rec_cert.indexOf("/",info11+1);
|
||||
int info13 = rec_cert.indexOf("/",info12+1);
|
||||
int info14 = rec_cert.indexOf("/",info13+1);
|
||||
int info15 = rec_cert.indexOf("/",info14+1);
|
||||
int info16 = rec_cert.indexOf("/",info15+1);
|
||||
int info17 = rec_cert.indexOf("/",info16+1);
|
||||
int info18 = rec_cert.indexOf("/",info17+1);
|
||||
|
||||
kmcVO.setCertNum (rec_cert.substring(0,info1));
|
||||
kmcVO.setDate (rec_cert.substring(info1+1,info2));
|
||||
//CI 복호화
|
||||
kmcVO.setCI (seed.getDec(rec_cert.substring(info2+1,info3), ""));
|
||||
kmcVO.setPhoneNo (rec_cert.substring(info3+1,info4));
|
||||
kmcVO.setPhoneCorp (rec_cert.substring(info4+1,info5));
|
||||
kmcVO.setBirthDay (rec_cert.substring(info5+1,info6));
|
||||
kmcVO.setGender (rec_cert.substring(info6+1,info7));
|
||||
kmcVO.setNation (rec_cert.substring(info7+1,info8));
|
||||
kmcVO.setName (rec_cert.substring(info8+1,info9));
|
||||
kmcVO.setResult (rec_cert.substring(info9+1,info10));
|
||||
kmcVO.setCertMet (rec_cert.substring(info10+1,info11));
|
||||
kmcVO.setIp (rec_cert.substring(info11+1,info12));
|
||||
kmcVO.setReserve1 (rec_cert.substring(info12+1,info13));
|
||||
kmcVO.setReserve2 (rec_cert.substring(info13+1,info14));
|
||||
kmcVO.setReserve3 (rec_cert.substring(info14+1,info15));
|
||||
kmcVO.setReserve4 (rec_cert.substring(info15+1,info16));
|
||||
kmcVO.setPlusInfo (rec_cert.substring(info16+1,info17));
|
||||
//DI 복호화
|
||||
kmcVO.setDI (seed.getDec(rec_cert.substring(info17+1,info18), ""));
|
||||
|
||||
//07. CI, DI 복호화
|
||||
// CI = seed.getDec(CI, "");
|
||||
// DI = seed.getDec(DI, "");
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
|
||||
}catch(StringIndexOutOfBoundsException ex){
|
||||
goErrorPage("StringIndexOutOfBoundsException", request, response);
|
||||
}catch(NullPointerException ex){
|
||||
goErrorPage("NullPointerException", request, response);
|
||||
}catch(NumberFormatException ex){
|
||||
goErrorPage("NumberFormatException", request, response);
|
||||
}catch(IllegalStateException ex){
|
||||
goErrorPage("IllegalStateException", request, response);
|
||||
}catch(IndexOutOfBoundsException ex){
|
||||
goErrorPage("IndexOutOfBoundsException", request, response);
|
||||
} catch (IOException e) {
|
||||
goErrorPage("IOException", request, response);
|
||||
} catch (ParseException e) {
|
||||
goErrorPage("ParseException", request, response);
|
||||
}
|
||||
return kmcVO;
|
||||
}
|
||||
|
||||
public AuthCertVO insertCertLog(KmcVO kmcVO, String msg) throws Exception {
|
||||
//KMC 본인인증 로그 insert
|
||||
AuthCertVO certVO = new AuthCertVO();
|
||||
certVO.setMberId(kmcVO.getPlusInfo());
|
||||
certVO.setCertNum(kmcVO.getCertNum());
|
||||
certVO.setCertDate(kmcVO.getDate());
|
||||
certVO.setCertDi(kmcVO.getDI());
|
||||
certVO.setCertPhone(kmcVO.getPhoneNo());
|
||||
certVO.setCertNation(kmcVO.getNation());
|
||||
certVO.setCertName(kmcVO.getName());
|
||||
certVO.setCertResult(kmcVO.getResult());
|
||||
certVO.setCertType(msg);
|
||||
certVO.setCertIpaddr(kmcVO.getIp());
|
||||
certVO.setBirthDay(kmcVO.getBirthDay());
|
||||
certVO.setSexdstnCode(kmcVO.getGender());
|
||||
|
||||
//디비 테이블에 저장하기
|
||||
mberManageService.insertCertInfoLog(certVO);
|
||||
|
||||
return certVO;
|
||||
}
|
||||
|
||||
private String getDomain(HttpServletRequest request) {
|
||||
String serverNm = request.getScheme() + "://" + request.getServerName();
|
||||
@ -144,5 +469,12 @@ public class KmcCertChecker {
|
||||
return mberCertPhoneVO;
|
||||
}
|
||||
|
||||
private void goErrorPage(String msg, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
|
||||
flashMap.put("msg", msg);
|
||||
FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request);
|
||||
flashMapManager.saveOutputFlashMap(flashMap, request, response);
|
||||
response.sendRedirect("/web/cert/log/kmcErrorPage.do");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,6 +19,8 @@ public class SendLogVO {
|
||||
/*내용*/
|
||||
private String contents;
|
||||
|
||||
private String sendMsgType;
|
||||
|
||||
|
||||
public String getSendId() {
|
||||
return sendId;
|
||||
@ -62,5 +64,13 @@ public class SendLogVO {
|
||||
public void setContents(String contents) {
|
||||
this.contents = contents;
|
||||
}
|
||||
public String getSendMsgType() {
|
||||
return sendMsgType;
|
||||
}
|
||||
public void setSendMsgType(String sendMsgType) {
|
||||
this.sendMsgType = sendMsgType;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
xmlns:security="http://www.springframework.org/schema/security"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
||||
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
|
||||
http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
||||
http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
||||
|
||||
<security:http pattern="/css/**" security="none"/>
|
||||
<security:http pattern="/html/**" security="none"/>
|
||||
|
||||
@ -3735,7 +3735,8 @@
|
||||
RECEIVE,
|
||||
FRST_SEND_PNTTM,
|
||||
CHECK_NO,
|
||||
CONTENTS
|
||||
CONTENTS,
|
||||
SEND_MSG_TYPE
|
||||
)
|
||||
|
||||
|
||||
@ -3748,7 +3749,8 @@
|
||||
#receive#,
|
||||
now(),
|
||||
#checkNo#,
|
||||
#contents#
|
||||
#contents#,
|
||||
#sendMsgType#
|
||||
)
|
||||
</insert>
|
||||
|
||||
@ -8296,5 +8298,21 @@
|
||||
|
||||
</delete>
|
||||
|
||||
<select id="mjonMsgDataDAO.selectSysMsgTodaySendYn" parameterClass="SendLogVO" resultClass="boolean">
|
||||
SELECT
|
||||
<![CDATA[
|
||||
COUNT(1) >= 1 AS todaySendYn
|
||||
]]>
|
||||
FROM
|
||||
mj_system_send a
|
||||
WHERE
|
||||
RECEIVE = #receive#
|
||||
<![CDATA[
|
||||
AND FRST_SEND_PNTTM >= CURDATE()
|
||||
AND FRST_SEND_PNTTM < CURDATE() + INTERVAL 1 DAY
|
||||
]]>
|
||||
AND SEND_MSG_TYPE = '01'
|
||||
</select>
|
||||
|
||||
</sqlMap>
|
||||
|
||||
|
||||
@ -980,6 +980,7 @@
|
||||
IFNULL(SLACK_NOTI, 'N') AS slackNoti,
|
||||
IFNULL(SMISHING_NOTI, 'N') AS smishingNoti,
|
||||
IFNULL(HOLI_SMISHING_NOTI, 'N') AS holiSmishingNoti,
|
||||
IFNULL(SMS_NOTI_IF_OVER_FIFTY, 'N') AS smsNotiIfOverFifty,
|
||||
LAST_UPDUSR_ID AS lasUpdusrId,
|
||||
LAST_UPDT_PNTTM AS lastUpdtPnttm
|
||||
FROM MJ_MBER_SETTING
|
||||
|
||||
@ -344,6 +344,7 @@
|
||||
<input type="hidden" name="tr_cert" value = "<%=tr_cert%>">
|
||||
<input type="hidden" name="tr_url" value = "<%=tr_url%>">
|
||||
<input type="hidden" name="tr_add" value = "<%=tr_add%>">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
<input type="submit" value="본인인증서비스 요청" onclick= "javascript:openKMCISWindow();">
|
||||
</form>
|
||||
<BR>
|
||||
|
||||
@ -904,5 +904,6 @@ function listAddrTransHistAjax(pageNo) {
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="mberId" id="mberId" value= "${userId}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
|
||||
@ -1885,6 +1885,7 @@ function actionLogin_end(){
|
||||
<input type="hidden" name="tr_cert" id="tr_certHeader" value = "">
|
||||
<input type="hidden" name="tr_url" id="tr_urlHeader" value = "">
|
||||
<input type="hidden" name="tr_add" id="tr_addHeader" value = "">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<form name="cmpChangeForm" id="cmpChangeForm" method="post" action="#">
|
||||
|
||||
@ -90,6 +90,7 @@ function openMberSecessionInfo(key){
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- ars 본인인증 Form -->
|
||||
|
||||
22
src/main/webapp/WEB-INF/jsp/web/cop/kmc/certResultError.jsp
Normal file
22
src/main/webapp/WEB-INF/jsp/web/cop/kmc/certResultError.jsp
Normal file
@ -0,0 +1,22 @@
|
||||
<%@ page contentType="text/html; charset=utf-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<script src="<c:url value='/js/jquery.js' />"></script>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
<script language=javascript>
|
||||
$( document ).ready(function() {
|
||||
alert("${msg}")
|
||||
self.close();
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@ -821,5 +821,6 @@ function listAddrTransHistAjax(pageNo) {
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="mberId" id="mberId" value= "${userId}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
|
||||
@ -860,6 +860,7 @@ function fnAddUserView() {
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
<input type="hidden" name="mberNm" id="mberNm" value="">
|
||||
<input type="hidden" name="moblphonNo" id="moblphonNo" value="">
|
||||
<input type="hidden" name="mberId" id="mberId" value="">
|
||||
|
||||
@ -129,6 +129,7 @@ function fnAddUserView() {
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
<input type="hidden" name="mberNm" id="mberNm" value="">
|
||||
<input type="hidden" name="moblphonNo" id="moblphonNo" value="">
|
||||
<input type="hidden" name="mberId" id="mberId" value="">
|
||||
|
||||
@ -644,6 +644,7 @@
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
<form name="arsForm" method="post" action="#">
|
||||
<input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
|
||||
|
||||
@ -634,6 +634,7 @@
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
<form name="arsForm" method="post" action="#">
|
||||
<input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
|
||||
|
||||
@ -707,6 +707,7 @@
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
<form name="arsForm" method="post" action="#">
|
||||
<input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
|
||||
|
||||
@ -505,6 +505,7 @@ function changeValueWork(obj){
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value="">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value="">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value="">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- 마이페이지 - 회원정보 변경 -->
|
||||
|
||||
@ -218,6 +218,7 @@ function updateUserInfo(){
|
||||
<input type="hidden" name="tr_cert" id="tr_cert" value="">
|
||||
<input type="hidden" name="tr_url" id="tr_url" value="">
|
||||
<input type="hidden" name="tr_add" id="tr_add" value="">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- 마이페이지 - 회원정보 변경 -->
|
||||
|
||||
@ -304,6 +304,7 @@ function callTo() {
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<form id="levelForm" name="levelForm" method="post">
|
||||
|
||||
@ -97,6 +97,7 @@ function openMberSecessionInfo(key){
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- ars 본인인증 Form -->
|
||||
|
||||
@ -704,6 +704,7 @@ function linkPage(pageNo){
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
<form name="listForm" action="<c:url value='/web/user/mberSecureLogin.do'/>" method="post">
|
||||
<input name="pageIndex" type="hidden" value="<c:out value='${mberCertLoginLogVO.pageIndex}'/>"/>
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<br><br>
|
||||
<%-- <br><br>
|
||||
[복호화 후 수신값] <br>
|
||||
<br>
|
||||
<table cellpadding=1 cellspacing=1>
|
||||
@ -120,6 +120,6 @@
|
||||
rec_cert : ${kmcVO.recCert}<br>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://www.munjaon.co.kr/publish/kmc/kmcis_web_sample_step01.jsp">[다시 테스트]</a>
|
||||
<a href="http://www.munjaon.co.kr/publish/kmc/kmcis_web_sample_step01.jsp">[다시 테스트]</a> --%>
|
||||
</body>
|
||||
</html>
|
||||
@ -863,6 +863,7 @@ function nameChk(target){
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- ars 본인인증 Form -->
|
||||
|
||||
@ -408,6 +408,7 @@ function guideTab(obj){
|
||||
<input type="hidden" id="tr_url" name="tr_url" value = "${tr_url}">
|
||||
<input type="hidden" id="tr_add" name="tr_add" value = "${tr_add}">
|
||||
<input type="hidden" id="tr_cert" name="tr_cert" value = "${tr_cert}">
|
||||
<input type="hidden" name="tr_ver" value = "V2">
|
||||
</form>
|
||||
|
||||
<!-- ars 본인인증 Form -->
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user