시큐리티.xml 머지 완료

This commit is contained in:
hehihoho3@gmail.com 2025-10-22 09:36:19 +09:00
commit aee4527d18
51 changed files with 867 additions and 2401 deletions

7
.gitignore vendored
View File

@ -204,3 +204,10 @@ rebel.xml
/.gemini
/.gemini.zip
/CLAUDE.md
<<<<<<< HEAD
# Mac OS
=======
### Mac OS ###
>>>>>>> refs/heads/5419_전화번호거짓표시50건이상
.DS_Store

View File

@ -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>

View File

@ -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";
}
}

View File

@ -148,24 +148,8 @@ public class KakaoApiProfile {
kakaoReturnVO.setBizReturnMsg(msg);
if(code.equals("200")) {
JSONObject tempCate = (JSONObject) object.get("data");
String senderKey = tempCate.get("senderKey").toString();
kakaoVO.setSenderKey(senderKey);
int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
//중복된 발신프로필이 없으면 추가 입력
if(profileCnt == 0) {
kakaoApiService.insertKakaoProfileInfo(kakaoVO);
}else {//중복이 있는 경우 처리
kakaoReturnVO.setBizReturnCode("310");
kakaoReturnVO.setBizReturnMsg("이미 등록되어 있는 발신프로필 입니다");
return kakaoReturnVO;
}
kakaoReturnVO.setSenderKey((String) ((JSONObject) object.get("data")).get("senderKey"));
}
}else {
kakaoReturnVO.setBizReturnCode(statusCode);

View File

@ -4,7 +4,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
import itn.let.kakao.kakaoComm.KakaoReturnVO;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
@ -29,4 +29,7 @@ public interface KakaoAlimTalkService {
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception;
public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception;
//발신 프로필 등록 처리
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception;
}

View File

@ -20,8 +20,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
@ -29,9 +27,11 @@ import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
import itn.let.kakao.kakaoComm.KakaoReturnVO;
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
import itn.let.kakao.kakaoComm.KakaoSendUtil;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.mjocommon.MjonCommon;
@ -86,6 +86,9 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@Resource(name = "kakaoApiService")
private KakaoApiService kakaoApiService;
@Autowired
private MjonPayDAO mjonPayDAO;
@ -1253,5 +1256,31 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
@Override
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception {
KakaoReturnVO returnVO = new KakaoReturnVO();
/* senderKey 사용 우무 */
int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
if(profileCnt > 0) {
returnVO.setBizReturnMsg("이미 등록된 발신프로필입니다. 동일 채널ID는 중복 등록이 불가합니다.");
}else {
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
delProfileList = selectDeleteProfileInfo(kakaoVO);
if(delProfileList.size() != 0) {
kakaoVO.setProfileId(delProfileList.get(0).getProfileId());
kakaoVO.setDeleteYn("N");
updateKakaoProfileStatus(kakaoVO);
returnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
}else {
kakaoApiService.insertKakaoProfileInfo(kakaoVO);
returnVO.setBizReturnMsg("발신프로필의 등록이 완료 되었습니다.");
}
}
return returnVO;
}
}

View File

@ -96,7 +96,10 @@ public class KakaoAlimTalkController {
KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO);
resultApiProfileList.add(tmpProfileVO);
/* API를 통하여 정상적으로 조회된 프로필만 add 처리 */
if("200".equals(tmpProfileVO.getBizReturnCode())) {
resultApiProfileList.add(tmpProfileVO);
}
}
@ -137,21 +140,8 @@ public class KakaoAlimTalkController {
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요청하기
String bizReturnCd = kakaoInfo.getBizReturnCode();
String bizReturnMsg = kakaoInfo.getBizReturnMsg();
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
if(bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다")) {
kakaoVO.setUserId(userId);
delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
}
int listSize = delProfileList.size();
modelAndView.addObject("kakaoInfo", kakaoInfo);
modelAndView.addObject("result", "success");
modelAndView.addObject("delInfoCnt", listSize);
}catch(Exception ex){
ex.printStackTrace();
@ -269,68 +259,14 @@ public class KakaoAlimTalkController {
kakaoVO.setLastUpdusrId(userId);
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO);
String bizReturnCd = kakaoInfo.getBizReturnCode();
String bizReturnMsg = kakaoInfo.getBizReturnMsg();
System.out.println(bizReturnCd);
System.out.println(bizReturnMsg);
/*
* 기존에 등록된 발신프로필이라고 결과가 오는 경우 데이터베이스에서 삭제 기록을 조회해 본다.
* 삭제 기록이 있는 경우 복구를 해주고(deleteYn 값을 'N'으로 변경)
* 기록이 없는 경우 사이트에 등록되었을 있음.
*
* */
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
if((bizReturnCd.equals("509") && bizReturnMsg.equals("이미 사용중인 카카오톡 채널입니다.")) || (bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다"))) {
delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
}
//삭제처리된 발신프로필이 있는 경우
if(delProfileList != null && delProfileList.size() > 0) {
int resultCnt = 0;
for(int i=0; i< delProfileList.size(); i++) {
KakaoVO tmpKakaoVO = new KakaoVO();
tmpKakaoVO.setUserId(userId);
tmpKakaoVO.setProfileId(delProfileList.get(i).getProfileId());
tmpKakaoVO.setDeleteYn("N");
int count = kakaoAlimTalkService.updateKakaoProfileStatus(tmpKakaoVO);
resultCnt = resultCnt + count;
}
KakaoReturnVO kakaoReturnVO = new KakaoReturnVO();
if(resultCnt > 0) {
kakaoReturnVO.setBizReturnCode("200");
kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
modelAndView.addObject("kakaoInfo", kakaoReturnVO);
modelAndView.addObject("result", "success");
}else {
kakaoReturnVO.setBizReturnCode("200");
kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구에 오류가 발생하였습니다.");
modelAndView.addObject("kakaoInfo", kakaoReturnVO);
modelAndView.addObject("result", "zeroUpdate");
}
}else {//삭제된 내역이 없는 경우 사이트에 발신프로필이 등록되어 있을 있다.
modelAndView.addObject("kakaoInfo", kakaoInfo);
modelAndView.addObject("result", "success");
if("200".equals(kakaoInfo.getBizReturnCode())) {
kakaoVO.setSenderKey(kakaoInfo.getSenderKey());
KakaoReturnVO internalReuslt = kakaoAlimTalkService.createKaKaoProfile(kakaoVO);
kakaoInfo.setBizReturnMsg(internalReuslt.getBizReturnMsg());
}
modelAndView.addObject("kakaoInfo", kakaoInfo);
modelAndView.addObject("result", "success");
}
}catch(Exception ex){

View File

@ -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();

View File

@ -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();
}
}

View File

@ -190,7 +190,7 @@ public interface MjonMsgDataService {
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception;
}

View File

@ -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

View File

@ -4224,6 +4224,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
//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));
//
@ -5191,4 +5202,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
return returnVO;
}
@Override
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
return mjonMsgDataDAO.selectSysMsgTodaySendYn(sendLogVO);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -480,7 +480,8 @@ public class SchedulerUtil {
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
// @Scheduled(cron = "0 0 0/2 * * ?") // 매시간 짝수 정각마다 실행
@Scheduled(cron = "0 0/3 * * * ?") // 3분마다 실행
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runKakaoOneTime() throws Exception {

View File

@ -65,6 +65,7 @@ public class JoinSettingVO {
private String slackNoti; //관리자 SLACK 알림 여부
private String smishingNoti; //첫결제(카드제외) 스미싱의심 알림 여부
private String holiSmishingNoti; //야간 스미싱알림 여부
private String smsNotiIfOverFifty; //50건이상 문자발송 안내문자 발송
}

View File

@ -121,5 +121,4 @@ public interface EgovLoginService {
//비밀번호 실패 횟수 조회
public LoginVO selectPassMiss(LoginVO vo) throws Exception;
public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO);
}

View File

@ -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);

View File

@ -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

View File

@ -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");
}
}

View File

@ -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;
}
}

View File

@ -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"/>

View File

@ -230,7 +230,7 @@
, MMD.BIZ_UMID AS bizUmid
, MMD.MSG_TYPE AS msgType
FROM
MJ_MSG_DATA MMD
MJ_MSG_DATA MMD FORCE index (IDX_MJ_MSG_DATA_13)
INNER JOIN LETTNGNRLMBER MB
ON MMD.USER_ID = MB.MBER_ID
INNER JOIN mj_msg_group_data MMGD

View File

@ -3737,7 +3737,8 @@
RECEIVE,
FRST_SEND_PNTTM,
CHECK_NO,
CONTENTS
CONTENTS,
SEND_MSG_TYPE
)
@ -3750,7 +3751,8 @@
#receive#,
now(),
#checkNo#,
#contents#
#contents#,
#sendMsgType#
)
</insert>
@ -8298,5 +8300,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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -9,7 +9,8 @@ $(document).ready(function(){
$('.download_btn').click(function(){
// click tag에 data-info="" 값 가져옴
var type = $(this).data('info');
var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
// var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
var downUrl = "<c:out value='/sample_mjon/type_샘플_예제_r2.zip' />";
downUrl = downUrl.replace('type', type);
location.href = downUrl;
});
@ -34,8 +35,8 @@ $(document).ready(function(){
<div class="pay_tab_wrap">
<ul class="tabType1">
<li class="tab active"><button type="button" onclick="TabType5(this,'1');TabType3(this,'1');">문자</button></li>
<li class="tab"><button type="button" onclick="TabType5(this,'2');TabType3(this,'7');">카카오톡</button></li>
<li class="tab active"><button type="button" onclick="TabType5(this,'1');listTab3(this,'1');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">문자</button></li>
<li class="tab"><button type="button" onclick="TabType5(this,'2');listTab3(this,'7');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">카카오톡</button></li>
</ul>
</div>
@ -97,6 +98,23 @@ $(document).ready(function(){
<th>jsp_example_select_price_r1.jsp</th>
<td>발송가능건수</td>
</tr>
<tr>
<th>jsp_example_inqry_chnlid_r1.jsp</th>
<td>카카오채널조회</td>
</tr>
<tr>
<th>jsp_example_inqry_templates_list_r1.jsp</th>
<td>카카오템플릿조회</td>
</tr>
<tr>
<th>jsp_example_send_at_r1.jsp</th>
<td>카카오알림톡발송</td>
</tr>
<tr>
<th>jsp_example_send_ft_r1.jsp</th>
<td>카카오친구톡발송</td>
</tr>
</table>
</div>
</div>
@ -136,6 +154,23 @@ $(document).ready(function(){
<th>php_example_select_price_r1.php</th>
<td>발송가능건수</td>
</tr>
<tr>
<th>php_example_inqry_chnlid_r1.php</th>
<td>카카오채널조회</td>
</tr>
<tr>
<th>php_example_inqry_templates_list_r1.php</th>
<td>카카오템플릿조회</td>
</tr>
<tr>
<th>php_example_send_at_r1.php</th>
<td>카카오알림톡발송</td>
</tr>
<tr>
<th>php_example_send_ft_r1.php</th>
<td>카카오친구톡발송</td>
</tr>
</table>
</div>
</div>
@ -306,7 +341,7 @@ $(document).ready(function(){
<div class="api_guide current" id="tab5_2">
<div class="api_download">
<ul class="info">
<li>- 카카오톡아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
<li>- 아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
<li>- JSP, PHP 외 타 예제는 계속해서 업데이트 될 예정입니다.</li>
</ul>
@ -341,14 +376,22 @@ $(document).ready(function(){
<col style="width:35%;">
<col style="width:65%;">
</colgroup>
<tr>
<th>kakao jsp_example_send_msg_r1.jsp</th>
<td>문자보내기(여러명에게 동일한문자)</td>
</tr>
<tr>
<th>sp_example_send_msgs_r1.jsp</th>
<td>문자보내기(여러명에게 다른문자)</td>
</tr>
<tr>
<th>jsp_example_inqry_chnlid_r1.jsp</th>
<td>카카오채널조회</td>
</tr>
<tr>
<th>jsp_example_inqry_templates_list_r1.jsp</th>
<td>카카오템플릿조회</td>
</tr>
<tr>
<th>jsp_example_send_at_r1.jsp</th>
<td>카카오알림톡발송</td>
</tr>
<tr>
<th>jsp_example_send_ft_r1.jsp</th>
<td>카카오친구톡발송</td>
</tr>
<tr>
<th>jsp_example_hstry_r1.jsp</th>
<td>전송내역조회</td>
@ -420,26 +463,34 @@ $(document).ready(function(){
<col style="width:65%;">
</colgroup>
<tbody>
<tr>
<th>php_example_send_msg_r1.php</th>
<td>문자보내기(여러명에게 동일한문자)</td>
</tr>
<tr>
<th>php_example_send_msgs_r1.php</th>
<td>문자보내기(여러명에게 다른문자)</td>
</tr>
<tr>
<th>php_example_hstry_r1.php</th>
<td>전송내역조회</td>
</tr>
<tr>
<th>php_example_hstry_detail_r1.php</th>
<td>상세전송내역조회</td>
</tr>
<tr>
<th>php_example_select_price_r1.php</th>
<td>발송가능건수</td>
</tr>
<tr>
<th>php_example_inqry_chnlid_r1.php</th>
<td>카카오채널조회</td>
</tr>
<tr>
<th>php_example_inqry_templates_list_r1.php</th>
<td>카카오템플릿조회</td>
</tr>
<tr>
<th>php_example_send_at_r1.php</th>
<td>카카오알림톡발송</td>
</tr>
<tr>
<th>php_example_send_ft_r1.php</th>
<td>카카오친구톡발송</td>
</tr>
<tr>
<th>php_example_hstry_r1.php</th>
<td>전송내역조회</td>
</tr>
<tr>
<th>php_example_hstry_detail_r1.php</th>
<td>상세전송내역조회</td>
</tr>
<tr>
<th>php_example_select_price_r1.php</th>
<td>발송가능건수</td>
</tr>
</tbody>
</table>
</div>

View File

@ -1896,6 +1896,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="#">

View File

@ -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 -->

View 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>

View File

@ -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>

View File

@ -135,30 +135,8 @@ function tokenSend(){
}else{
if(code == '310'){
var infoSize = returnData.delInfoCnt;
if(infoSize > 0){
if(confirm("기존에 삭제된 채널ID가 있습니다. 복구 하시겠습니까?")){
fnUpdateProfileStatus();
}
}else{
alert("이미 등록된 채널ID 입니다. 타 사이트에 등록된 채널ID를 확인해 주세요.");
return false;
}
}else{//인증 토큰 발송에 오류가 있는 경우 카카오의 오류 메세지를 표시
alert("인증번호 받기 처리 중 오류가 발생하였습니다. 오류 코드 : " + msg);
return false;
}
alert(msg);
return false;
}
}else{
@ -172,37 +150,6 @@ function tokenSend(){
});
}
function fnUpdateProfileStatus(){
var data = new FormData(bizForm);
$.ajax({
url : "<c:url value='/web/mjon/kakao/profile/updateKaKaoProfileStatusAjax.do'/>"
, type : 'POST'
, data : data
, dataType:'json'
, async: false
, processData: false
, contentType: false
, cache: false
, success: function (returnData, status) {
if(returnData.result == "success") {//인증번호 발송 완료
alert(returnData.kakaoInfo.bizReturnMsg);
location.reload();
}else{
alert(returnData.kakaoInfo.bizReturnMsg);
return false;
}
}
,error : function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
}
function sendProfile(){
var firstSelect = $("select[name='firstCatagoryList']").val();
var secondSelect = $("select[name='secondCatagoryList']").val();
@ -259,23 +206,9 @@ function sendProfile(){
if(returnData.result == "loginFail") {//차단 발신번호인 경우 등록 불가
alert("로그인후 진행");
}else if(returnData.result == "success") {
var code = returnData.kakaoInfo.bizReturnCode
if(code == "200"){
alert(returnData.kakaoInfo.bizReturnMsg);
location.reload();
}else if(code == "310"){//타사이트에 등록되어 있는 경우 알림메세지 표시
alert("이미 등록된 채널ID 입니다. 타 사이트에 등록된 채널ID를 확인해 주세요.");
return false;
}else{
alert(returnData.kakaoInfo.bizReturnMsg);
return false;
}
}else if(returnData.result == "zeroUpdate"){
}else{
alert(returnData.kakaoInfo.bizReturnMsg);
return false;
location.reload();
}
},
beforeSend : function(xmlHttpRequest) {

View File

@ -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="">

View File

@ -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="">

View File

@ -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 = "">

View File

@ -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 = "">

View File

@ -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 = "">

View File

@ -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>
<!-- 마이페이지 - 회원정보 변경 -->

View File

@ -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>
<!-- 마이페이지 - 회원정보 변경 -->

View File

@ -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">

View File

@ -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 -->

View File

@ -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}'/>"/>

View File

@ -26,7 +26,8 @@
opener.parentVal = resultFlag;
var resultNameChk = '${resultNameChk}';
opener.nameChkVal = resultNameChk;
opener.insertDocumentForm.ownerName.value = "${searchVO.name}";
// opener.insertDocumentForm.ownerName.value = "${searchVO.name}";
opener.insertDocumentForm.ownerName.value = "${name}";
opener.insertDocumentForm.CI.value = "${CI}";
opener.insertDocumentForm.birthDay.value = "${birthDay}";
opener.hpCertChkResult();

View File

@ -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>

View File

@ -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 -->

View File

@ -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.

Binary file not shown.