From 3d4516902843b7215837f5ef7204c4fe70166668 Mon Sep 17 00:00:00 2001 From: LJH Date: Thu, 13 Oct 2022 09:32:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EC=A4=80=ED=98=B8=20=EC=A0=84?= =?UTF-8?q?=EC=9E=90=EC=A1=B0=EC=A0=95=EC=8B=9C=EC=8A=A4=ED=85=9C=20?= =?UTF-8?q?=EA=B3=A0=EB=8F=84=ED=99=94=20=EC=BB=A4=EB=B0=8B=20=20-=20OTP?= =?UTF-8?q?=20=EB=AC=B8=EC=9E=90=EC=9D=B8=EC=A6=9D=20=EA=B0=9C=EB=B0=9C=20?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/kcc/com/cmm/LoginVO.java | 10 ++ .../kccadr/adjreqmgr/service/AdjReqMgrVO.java | 31 +++++- .../service/impl/SMSOracleServiceImpl.java | 6 +- .../{otpCertUtil.java => OtpCertUtil.java} | 51 +++++---- .../let/uat/uia/service/EgovLoginService.java | 2 + .../service/impl/EgovLoginServiceImpl.java | 5 + .../let/uat/uia/service/impl/LoginDAO.java | 4 + .../let/uat/uia/web/EgovLoginController.java | 101 +++++++++++++----- .../sqlmap/kccadr/msg/Msg_SQL_Mysql.xml | 24 ++++- .../let/uat/uia/EgovLoginUsr_SQL_Mysql.xml | 8 ++ .../WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp | 31 ++++-- 11 files changed, 213 insertions(+), 60 deletions(-) rename src/main/java/kcc/kccadr/kccadrCom/web/{otpCertUtil.java => OtpCertUtil.java} (56%) diff --git a/src/main/java/kcc/com/cmm/LoginVO.java b/src/main/java/kcc/com/cmm/LoginVO.java index b3615254..fca5b341 100644 --- a/src/main/java/kcc/com/cmm/LoginVO.java +++ b/src/main/java/kcc/com/cmm/LoginVO.java @@ -124,6 +124,8 @@ public class LoginVO implements Serializable{ /*20221012 대시보드를 위해 직급 코드 추가*/ private String ofcpsNm; + private String phone; + public String getId() { return id; } @@ -429,5 +431,13 @@ public class LoginVO implements Serializable{ public void setCertNum(String certNum) { this.certNum = certNum; } + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + + } diff --git a/src/main/java/kcc/kccadr/adjreqmgr/service/AdjReqMgrVO.java b/src/main/java/kcc/kccadr/adjreqmgr/service/AdjReqMgrVO.java index 66615c1f..9e28ff18 100644 --- a/src/main/java/kcc/kccadr/adjreqmgr/service/AdjReqMgrVO.java +++ b/src/main/java/kcc/kccadr/adjreqmgr/service/AdjReqMgrVO.java @@ -252,6 +252,10 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{ * */ private String smsSendSeq; // SMS 발송 로그 PK + private String phone; // 수신번호 + private String userId; + private String smsSendTypeCd; // 발송유형 - CC052 + private String certNum; public AdjReqMgrVO getAdrVO() { return adrVO; @@ -1193,9 +1197,30 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{ public void setSmsSendSeq(String smsSendSeq) { this.smsSendSeq = smsSendSeq; } - - - + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public String getSmsSendTypeCd() { + return smsSendTypeCd; + } + public void setSmsSendTypeCd(String smsSendTypeCd) { + this.smsSendTypeCd = smsSendTypeCd; + } + public String getCertNum() { + return certNum; + } + public void setCertNum(String certNum) { + this.certNum = certNum; + } } diff --git a/src/main/java/kcc/kccadr/cmm/service/impl/SMSOracleServiceImpl.java b/src/main/java/kcc/kccadr/cmm/service/impl/SMSOracleServiceImpl.java index cd29c9cc..bb188a00 100644 --- a/src/main/java/kcc/kccadr/cmm/service/impl/SMSOracleServiceImpl.java +++ b/src/main/java/kcc/kccadr/cmm/service/impl/SMSOracleServiceImpl.java @@ -13,6 +13,7 @@ import java.net.URLEncoder; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Random; import javax.annotation.Resource; @@ -705,15 +706,16 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수 if (bytes > 90) { - sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클) +// sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클) adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정 } else { - sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클) +// sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클) adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정 } //sms 발송 관리 테이블에 저장 adjReqMgrVO.setRpplNm(""); + // SMS 발송 로그 pk idgen String smsSendSeq = idgenService.getNextStringId(); adjReqMgrVO.setSmsSendSeq(smsSendSeq); diff --git a/src/main/java/kcc/kccadr/kccadrCom/web/otpCertUtil.java b/src/main/java/kcc/kccadr/kccadrCom/web/OtpCertUtil.java similarity index 56% rename from src/main/java/kcc/kccadr/kccadrCom/web/otpCertUtil.java rename to src/main/java/kcc/kccadr/kccadrCom/web/OtpCertUtil.java index 69296376..cbecf097 100644 --- a/src/main/java/kcc/kccadr/kccadrCom/web/otpCertUtil.java +++ b/src/main/java/kcc/kccadr/kccadrCom/web/OtpCertUtil.java @@ -1,33 +1,38 @@ package kcc.kccadr.kccadrCom.web; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; +import kcc.com.cmm.LoginVO; +import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO; -import kcc.let.uss.umt.service.UserManageVO; - -public class otpCertUtil { +public class OtpCertUtil { /** - * @Method Name : mjonSmsCertCheck - * @작성일 : 2022. 8. 25. + * @Method Name : otpCert + * @작성일 : 2022. 10. 12. * @작성자 : 이준호 - * @Method 설명 : 미허용 IP 관리자 페이지 로그인 시 SMS인증번호 체크 + * @Method 설명 : OTP 문자인증 시 인증번호 검증 */ - public String otpCertUtil(String phone, String certNum, String mberId) throws Exception{ -// try { + public String otpCert(LoginVO loginVO_P, LoginVO loginVO_R) throws Exception{ + try { + + /* + * select 조건 + * loginVO_P - certNum + * loginVO_P - phone + * loginVO_R - uniqId + * smsSendTypeCd = '001' (OTP인증번호 발송) + * limit 1 + * + * */ + + AdjReqMgrVO adjReqMgrVO = new AdjReqMgrVO(); + + adjReqMgrVO.setCertNum(loginVO_P.getCertNum()); + adjReqMgrVO.setPhone(loginVO_P.getPhone()); + adjReqMgrVO.setFrstRegisterId(loginVO_R.getUniqId()); + adjReqMgrVO.setSmsSendTypeCd("001"); - UserManageVO userManageVO = new UserManageVO(); - // userManageVO set - userManageVO.setCertNum(certNum); - userManageVO.setMoblphonNo(phone); - userManageVO.setEmplyrId(mberId); -// // SendLogVO set -// SendLogVO sendLogVO = new SendLogVO(); -// sendLogVO.setReceive(userManageVO.getMoblphonNo()); -// // // 인증번호 가져오기 // sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO); // if (sendLogVO == null) { @@ -58,10 +63,10 @@ public class otpCertUtil { // return "timeOut"; // } // } + return ""; -// } catch (Exception e) { + } catch (Exception e) { return "exception"; -// } -// } + } } } diff --git a/src/main/java/kcc/let/uat/uia/service/EgovLoginService.java b/src/main/java/kcc/let/uat/uia/service/EgovLoginService.java index 8c464425..ddc0caa8 100644 --- a/src/main/java/kcc/let/uat/uia/service/EgovLoginService.java +++ b/src/main/java/kcc/let/uat/uia/service/EgovLoginService.java @@ -88,4 +88,6 @@ public interface EgovLoginService { void updatePassMissReset(LoginVO loginVO) throws Exception; void updateEmplyrSttusCode(LoginVO loginVO) throws Exception; + + String selectUniqueId(String str) throws Exception; } diff --git a/src/main/java/kcc/let/uat/uia/service/impl/EgovLoginServiceImpl.java b/src/main/java/kcc/let/uat/uia/service/impl/EgovLoginServiceImpl.java index 1409f77a..6fc064f7 100644 --- a/src/main/java/kcc/let/uat/uia/service/impl/EgovLoginServiceImpl.java +++ b/src/main/java/kcc/let/uat/uia/service/impl/EgovLoginServiceImpl.java @@ -275,5 +275,10 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements loginDAO.updateEmplyrSttusCode(loginVO); } + @Override + public String selectUniqueId(String str) throws Exception{ + return loginDAO.selectUniqueId(str); + } + } diff --git a/src/main/java/kcc/let/uat/uia/service/impl/LoginDAO.java b/src/main/java/kcc/let/uat/uia/service/impl/LoginDAO.java index d3014b93..9c4c161d 100644 --- a/src/main/java/kcc/let/uat/uia/service/impl/LoginDAO.java +++ b/src/main/java/kcc/let/uat/uia/service/impl/LoginDAO.java @@ -133,4 +133,8 @@ public class LoginDAO extends EgovAbstractDAO { return (String)select("loginDAO.selectLoginType", str); } + public String selectUniqueId(String str) throws Exception{ + return (String)select("loginDAO.selectUniqueId", str); + } + } diff --git a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java index 59280c2b..d40e78b5 100644 --- a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Random; import javax.annotation.Resource; import javax.script.ScriptEngineManager; @@ -67,6 +68,7 @@ import kcc.com.cmm.util.StringUtil; import kcc.com.cmm.util.WebUtil; import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO; import kcc.kccadr.cmm.service.SMSOracleService; +import kcc.kccadr.kccadrCom.web.OtpCertUtil; import kcc.let.sym.log.clg.service.EgovLoginLogService; import kcc.let.sym.log.clg.service.LoginLog; import kcc.let.sym.mnu.mpm.service.MenuManageJTreeVO; @@ -175,6 +177,9 @@ public class EgovLoginController { @Resource(name = "SMSOracleService") private SMSOracleService sMSOracleService; + + @Resource(name = "MjonSmsCertSendUtil") + private OtpCertUtil otpCertUtil; /* @@ -553,30 +558,30 @@ public class EgovLoginController { */ Boolean otpCertFlag = false; -// if(StringUtil.isNotEmpty(loginVO.getCertNum()) && "002".equals(resultVO.getLoginTypeCd())) { -// -// //수신자 + if(StringUtil.isNotEmpty(loginVO.getCertNum()) && "002".equals(resultVO.getLoginTypeCd())) { + + //수신자 // String callTo = resultVO.getMoblphonNo(); // String checkNo = loginVO.getCheckNo(); // String mberId = resultVO.getId(); -// -// /* -// * 인증번호 비교 -// * return -// * empty = "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요." -// * success = "5분이내 발송 내역 비교, 인증번호 비교 시 일치" -// * smsCertFlag = true -// * checkNoFail = "인증번호를 확인해 주세요" -// * timeOut = "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다." -// * Exception = "에러가 발생하였습니다. 다시 시도해 주세요. \\n 에러가 지속될 시 최고관리자에게 문의하세요."; -// * final = "exception"; -// * -// * 실패 시 passMiss 숫자++ update -// * loginService.updatePassMissPlus(loginVO); -// * -// * */ -// String result = otpCertUtil.otpCertUtil(callTo, checkNo, mberId); -// + + /* + * 인증번호 비교 + * return + * empty = "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요." + * success = "5분이내 발송 내역 비교, 인증번호 비교 시 일치" + * smsCertFlag = true + * checkNoFail = "인증번호를 확인해 주세요" + * timeOut = "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다." + * Exception = "에러가 발생하였습니다. 다시 시도해 주세요. \\n 에러가 지속될 시 최고관리자에게 문의하세요."; + * final = "exception"; + * + * 실패 시 passMiss 숫자++ update + * loginService.updatePassMissPlus(loginVO); + * + * */ + String result = otpCertUtil.otpCert(loginVO, resultVO); + // if(result.equals("empty")) { // loginService.updatePassMissPlus(loginVO); // model.addAttribute("message", "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요."); @@ -622,8 +627,8 @@ public class EgovLoginController { // initRsa(request); // return "uat/uia/EgovLoginUsr"; // } -// } -// + } + if (loginService.getUserAuth(resultVO) != null) { resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority()); } @@ -2293,11 +2298,57 @@ public class EgovLoginController { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); + try { + String userId = adjReqMgrVO.getUserId(); + + //userId -> esntlId 조회후 frstregistId에 set + adjReqMgrVO.setFrstRegisterId(loginService.selectUniqueId(userId)); + + // data set + adjReqMgrVO = otpDataSet(adjReqMgrVO); + + sMSOracleService.insertSmsOtpCertNumSend(adjReqMgrVO); + + modelAndView.addObject("result", "SUCCESS"); + + } catch (Exception e) { + System.out.println("otpCertSmsAjax Exception!!!!!!!!"); + modelAndView.addObject("message", "인증번호 발송에 실패하였습니다."); + } - - + return modelAndView; } + + /** + * (관리자) OTP인증 인증번호 발송 Ajax data set 함수 + * + * @return AdjReqMgrVO + */ + private AdjReqMgrVO otpDataSet(AdjReqMgrVO adjReqMgrVO) { + + // 인증번호 난수 생성 + String contents = "전자조정시스템 OTP 인증 로그인 인증번호 문자입니다. 인증번호는 : %code% 입니다."; + String code = ""; + long seed = System.currentTimeMillis(); + Random random = new Random(seed); + StringBuffer randomCode = new StringBuffer(); + for (int i = 0; i < 6; i++) { + code = randomCode.append(Integer.toString(random.nextInt(10))).toString(); + } + contents = contents.replace("%code%", code); + + // 문자내용 set + adjReqMgrVO.setSendMsg(contents); + + // 인증번호 set + adjReqMgrVO.setCertNum(code); + + // 문자 발송 로그 + adjReqMgrVO.setSmsSendTypeCd("001"); + + return adjReqMgrVO; + } } diff --git a/src/main/resources/egovframework/sqlmap/kccadr/msg/Msg_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/kccadr/msg/Msg_SQL_Mysql.xml index 339850e4..43507ac9 100644 --- a/src/main/resources/egovframework/sqlmap/kccadr/msg/Msg_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/kccadr/msg/Msg_SQL_Mysql.xml @@ -226,7 +226,29 @@ - + INSERT + INTO adr_sms_send_mgr + ( + sms_send_seq, + sms_send_type_cd, + phone, + call_from, + cn, + cert_num, + frst_regist_pnttm, + frst_register_id + ) + VALUES + ( + #smsSendSeq#, + #smsSendTypeCd#, + #trPhone#, + #sendTelNo#, + #sendMsg#, + #certNum#, + now(), + #frstRegisterId# + ) diff --git a/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Mysql.xml index e2278758..6871981e 100644 --- a/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Mysql.xml @@ -408,4 +408,12 @@ + + diff --git a/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp b/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp index 4504fda4..14251b52 100644 --- a/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp +++ b/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp @@ -77,7 +77,14 @@ function actionLogin() { } else if (document.loginForm.password_text.value =="") { alert("비밀번호를 입력하세요"); return false; - } else { + } + + else if (document.loginForm.checkNo.value ==""){ + alert("인증번호를 입력하세요."); + return false; + } + + else { // var rsa = new RSAKey(); // rsa.setPublic($('#RSAModulus').val(),$('#RSAExponent').val()); @@ -131,10 +138,22 @@ function getid(form){ form.checkId.checked = ((form.id_text.value = getCookie("ncms_saveid")) != ""); } +function validation(){ + if(document.loginForm.phone.value == ''){ + alert('휴대폰번호를 입력해주세요.'); + return false; + } + return true; +} + // OTP 문자인증 문자발송 Ajax function optCertNumSms(){ - document.certForm.phone.value = document.loginForm.phone.value; + if(!validation()){ + return false; + } + + document.certForm.trPhone.value = document.loginForm.phone.value; var data = new FormData(document.certForm); @@ -151,7 +170,7 @@ function optCertNumSms(){ console.log(returnData.result); if(returnData.result == 'SUCCESS'){ }else{ - alert(returnData.message); + alert(returnData.message); } }, error: function (e) { alert("요청에 실패하였습니다."); console.log("ERROR : ", e); } @@ -205,7 +224,7 @@ function optCertNumSms(){

휴대폰번호

- +

인증번호 입력

@@ -230,8 +249,8 @@ function optCertNumSms(){
- - + +