이준호 전자조정시스템고도화 커밋

- OTP인증 개발 완료
This commit is contained in:
LJH 2022-10-13 16:04:25 +09:00
parent cd26194a66
commit df4fb63720
8 changed files with 131 additions and 112 deletions

View File

@ -255,7 +255,7 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
private String phone; // 수신번호 private String phone; // 수신번호
private String userId; private String userId;
private String smsSendTypeCd; // 발송유형 - CC052 private String smsSendTypeCd; // 발송유형 - CC052
private String certNum; private String certNum; // 인증번호
public AdjReqMgrVO getAdrVO() { public AdjReqMgrVO getAdrVO() {
return adrVO; return adrVO;

View File

@ -41,4 +41,6 @@ public interface SMSOracleService {
// SMS OTP 인증번호 발송(저작위 SMS서버 DB등록) // SMS OTP 인증번호 발송(저작위 SMS서버 DB등록)
public String insertSmsOtpCertNumSend(AdjReqMgrVO adjReqMgrVO) throws Exception; public String insertSmsOtpCertNumSend(AdjReqMgrVO adjReqMgrVO) throws Exception;
public String selectAdrOtpCertNumSmsLog(AdjReqMgrVO adjReqMgrVO) throws Exception;
} }

View File

@ -731,7 +731,10 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
return result; return result;
} }
@Override
public String selectAdrOtpCertNumSmsLog(AdjReqMgrVO adjReqMgrVO) throws Exception{
return msgMgrDAO.selectAdrOtpCertNumSmsLog(adjReqMgrVO);
}
} }

View File

@ -1,13 +1,23 @@
package kcc.kccadr.kccadrCom.web; package kcc.kccadr.kccadrCom.web;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import kcc.com.cmm.LoginVO; import kcc.com.cmm.LoginVO;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO; import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.cmm.service.SMSOracleService;
@Component("OtpCertUtil") @Component("OtpCertUtil")
public class OtpCertUtil { public class OtpCertUtil {
@Resource(name = "SMSOracleService")
private SMSOracleService sMSOracleService;
/** /**
* @Method Name : otpCert * @Method Name : otpCert
* @작성일 : 2022. 10. 12. * @작성일 : 2022. 10. 12.
@ -32,41 +42,32 @@ public class OtpCertUtil {
adjReqMgrVO.setCertNum(loginVO_P.getCertNum()); adjReqMgrVO.setCertNum(loginVO_P.getCertNum());
adjReqMgrVO.setPhone(loginVO_P.getPhone()); adjReqMgrVO.setPhone(loginVO_P.getPhone());
adjReqMgrVO.setFrstRegisterId(loginVO_R.getUniqId()); adjReqMgrVO.setFrstRegisterId(loginVO_R.getUniqId());
adjReqMgrVO.setSmsSendTypeCd("001");
String frstRegistPnttm = "";
frstRegistPnttm = sMSOracleService.selectAdrOtpCertNumSmsLog(adjReqMgrVO);
if ("".equals(frstRegistPnttm) || frstRegistPnttm == null) {
return "empty";
} else {
// 시간 비교
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date nowdate = new Date();
Date compareDate = format.parse(frstRegistPnttm);
// // 인증번호 가져오기 Calendar cal = Calendar.getInstance();
// sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO); cal.setTime(nowdate);
// if (sendLogVO == null) { // 5분 추가
// return "empty"; cal.add(Calendar.MINUTE, +5);
// } else {
// // 시간 비교 nowdate = cal.getTime();
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date nowdate = new Date(); // 인증번호을 발송한지 5분 이내일때
// Date compareDate = format.parse(sendLogVO.getFrstSendPnttm()); if (compareDate.before(nowdate)) {
// return "success";
// Calendar cal = Calendar.getInstance(); } else {
// cal.setTime(compareDate); return "timeOut";
// // 5분 추가 }
// cal.add(Calendar.MINUTE, +5); }
//
// compareDate = cal.getTime();
//
// // 인증번호을 발송한지 5분 이내일때
// if (compareDate.after(nowdate)) {
// UserManageVO checkUser = userManageService.selectAdminUserSmsCertCheck(userManageVO);
//
// if (checkUser != null) {
// return "success";
// } else {
// return "checkNoFail";
// }
// } else {
// return "timeOut";
// }
// }
return "";
} catch (Exception e) { } catch (Exception e) {
return "exception"; return "exception";

View File

@ -79,4 +79,10 @@ public class MsgMgrDAO extends EgovAbstractDAO {
insert("MsgMgrDAO.insertAdrOtpCertNumSmsLog", adjReqMgrVO); insert("MsgMgrDAO.insertAdrOtpCertNumSmsLog", adjReqMgrVO);
} }
public String selectAdrOtpCertNumSmsLog(AdjReqMgrVO adjReqMgrVO) throws Exception{
return (String) select("MsgMgrDAO.selectAdrOtpCertNumSmsLog", adjReqMgrVO);
}
} }

View File

@ -207,6 +207,7 @@ public class EgovLoginController {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated) if (isAuthenticated)
return "redirect:/cmm/main/mainPage.do"; return "redirect:/cmm/main/mainPage.do";
// initRsa(request); // initRsa(request);
//로그인 페이지 접근시 IP체크 제거_로그인 버튼 클릭 로그인 유형에 따라 체크로 변경_221011_이준호 //로그인 페이지 접근시 IP체크 제거_로그인 버튼 클릭 로그인 유형에 따라 체크로 변경_221011_이준호
@ -582,14 +583,14 @@ public class EgovLoginController {
* */ * */
String result = otpCertUtil.otpCert(loginVO, resultVO); String result = otpCertUtil.otpCert(loginVO, resultVO);
// if(result.equals("empty")) { if(result.equals("empty")) {
// loginService.updatePassMissPlus(loginVO); loginService.updatePassMissPlus(loginVO);
// model.addAttribute("message", "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요."); model.addAttribute("message", "인증번호가 일치하지 않습니다. \\n 다시 시도해주세요.");
// initRsa(request); return "uat/uia/EgovLoginUsr";
// return "uat/uia/EgovLoginUsr"; } else if(result.equals("success")) {
// } else if(result.equals("success")) { otpCertFlag = true;
// smsCertFlag = true; }
// } else if(result.equals("checkNoFail")) { // else if(result.equals("checkNoFail")) {
// loginService.updatePassMissPlus(loginVO); // loginService.updatePassMissPlus(loginVO);
// model.addAttribute("message", "인증번호를 확인해 주세요"); // model.addAttribute("message", "인증번호를 확인해 주세요");
// model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); // model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요.");
@ -602,31 +603,23 @@ public class EgovLoginController {
// //
// initRsa(request); // initRsa(request);
// return "uat/uia/EgovLoginUsr"; // return "uat/uia/EgovLoginUsr";
// } else if(result.equals("timeOut")) { else if(result.equals("timeOut")) {
// model.addAttribute("message", "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다."); model.addAttribute("message", "인증번호 시간이 초과되었습니다.");
// model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n 인증번호 받기를 다시 시도해주세요.");
// model.addAttribute("mode", "본인인증"); model.addAttribute("mode", "OTP");
// model.addAttribute("id", resultVO.getId()); model.addAttribute("id", resultVO.getId());
// model.addAttribute("password", authSelfPw); model.addAttribute("password", authSelfPw);
//
// //인증문자 발송 return "uat/uia/EgovLoginUsr";
// mjonSmsCertSendUtil.mjonSmsCertSend(callTo); } else if(result.equals("Exception")) {
// model.addAttribute("message", "에러가 발생하였습니다. 다시 시도해 주세요. \\\\n 에러가 지속될 시 최고관리자에게 문의하세요.");
// initRsa(request); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n 인증번호 받기를 다시 시도해주세요.");
// return "uat/uia/EgovLoginUsr"; model.addAttribute("mode", "OTP");
// } else if(result.equals("Exception")) { model.addAttribute("id", resultVO.getId());
// model.addAttribute("message", "에러가 발생하였습니다. 다시 시도해 주세요. \\\\n 에러가 지속될 시 최고관리자에게 문의하세요."); model.addAttribute("password", authSelfPw);
// model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요.");
// model.addAttribute("mode", "본인인증"); return "uat/uia/EgovLoginUsr";
// model.addAttribute("id", resultVO.getId()); }
// model.addAttribute("password", authSelfPw);
//
// //인증문자 발송
// mjonSmsCertSendUtil.mjonSmsCertSend(callTo);
//
// initRsa(request);
// return "uat/uia/EgovLoginUsr";
// }
} }
if (loginService.getUserAuth(resultVO) != null) { if (loginService.getUserAuth(resultVO) != null) {
@ -698,7 +691,7 @@ public class EgovLoginController {
} }
// OTP 로그인 // OTP 로그인
else if("002".equals(resultVO.getLoginTypeCd()) && StringUtil.isEmpty(resultVO.getCertNum())){ else if("002".equals(resultVO.getLoginTypeCd()) && StringUtil.isEmpty(loginVO.getCertNum()) && !otpCertFlag){
model.addAttribute("mode","OTP"); model.addAttribute("mode","OTP");

View File

@ -225,7 +225,6 @@
</insert> </insert>
<insert id="MsgMgrDAO.insertAdrOtpCertNumSmsLog" parameterClass="AdjReqMgrVO"> <insert id="MsgMgrDAO.insertAdrOtpCertNumSmsLog" parameterClass="AdjReqMgrVO">
INSERT INSERT
INTO adr_sms_send_mgr INTO adr_sms_send_mgr
( (
@ -249,10 +248,18 @@
now(), now(),
#frstRegisterId# #frstRegisterId#
) )
</insert> </insert>
<select id="MsgMgrDAO.selectAdrOtpCertNumSmsLog" parameterClass="AdjReqMgrVO" resultClass="String">
SELECT a.frst_regist_pnttm AS frstRegistPnttm
FROM adr_sms_send_mgr a
WHERE a.phone = #phone#
AND a.frst_register_id = #frstRegisterId#
AND a.sms_send_type_cd = '001'
AND a.cert_num = #certNum#
ORDER BY frst_regist_pnttm DESC LIMIT 1
</select>
</sqlMap> </sqlMap>

View File

@ -79,7 +79,7 @@ function actionLogin() {
return false; return false;
} }
<c:if test="${mode == 'OTP'}"> <c:if test="${mode == 'OTP'}">
else if (document.loginForm.checkNo.value ==""){ else if (document.loginForm.certNum.value ==""){
alert("인증번호를 입력하세요."); alert("인증번호를 입력하세요.");
return false; return false;
} }
@ -169,6 +169,7 @@ function optCertNumSms(){
success: function (returnData, status) { success: function (returnData, status) {
console.log(returnData.result); console.log(returnData.result);
if(returnData.result == 'SUCCESS'){ if(returnData.result == 'SUCCESS'){
alert("인증번호가 발송되었습니다. \n 발송된 인증번호를 입력해주세요.");
}else{ }else{
alert(returnData.message); alert(returnData.message);
} }
@ -176,6 +177,10 @@ function optCertNumSms(){
error: function (e) { alert("요청에 실패하였습니다."); console.log("ERROR : ", e); } error: function (e) { alert("요청에 실패하였습니다."); console.log("ERROR : ", e); }
}); });
} }
function onlyNumber(thisObj) {
thisObj.value = thisObj.value.replace(/[^0-9]/gi, "");
}
</script> </script>
</head> </head>
@ -196,6 +201,7 @@ function optCertNumSms(){
</div> </div>
<div class="login_right_box login_right_otp_box"> <div class="login_right_box login_right_otp_box">
<p class="login_tit">로그인</p> <p class="login_tit">로그인</p>
<c:if test="${mode ne 'OTP'}">
<kc:profile value="local"> <kc:profile value="local">
아이디 선택 : <select id="devIdSelect" style="width: 400px; height: 30px;" onchange="login()"> 아이디 선택 : <select id="devIdSelect" style="width: 400px; height: 30px;" onchange="login()">
<option value="">로그인할 아이디를 선택해주세요.</option> <option value="">로그인할 아이디를 선택해주세요.</option>
@ -209,6 +215,7 @@ function optCertNumSms(){
</select> </select>
<br></br> <br></br>
</kc:profile> </kc:profile>
</c:if>
<div class="id_box"> <div class="id_box">
<p>ID</p> <p>ID</p>
<label for="id_text"></label> <label for="id_text"></label>
@ -223,7 +230,7 @@ function optCertNumSms(){
<div class="id_box otp_phone_box"> <div class="id_box otp_phone_box">
<p>휴대폰번호</p> <p>휴대폰번호</p>
<label for="phone"></label> <label for="phone"></label>
<input type="text" name="phone" id="phone" placeholder="휴대폰번호를 입력해주세요." /> <input type="text" name="phone" id="phone" onkeyup="onlyNumber(this)" placeholder="휴대폰번호를 입력해주세요." />
<button type="button" class="otp_phone_btn" onclick="optCertNumSms();">인증번호받기</button> <button type="button" class="otp_phone_btn" onclick="optCertNumSms();">인증번호받기</button>
</div> </div>
<div class="id_box otp_phone_box"> <div class="id_box otp_phone_box">