이준호 전자조정시스템 고도화 커밋
- OTP 문자인증 개발 중
This commit is contained in:
parent
369727ec79
commit
3d45169028
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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";
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
@ -176,6 +178,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,12 +2298,58 @@ 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class RequestWrapperForSecurity extends HttpServletRequestWrapper {
|
||||
|
||||
@ -226,7 +226,29 @@
|
||||
|
||||
<insert id="MsgMgrDAO.insertAdrOtpCertNumSmsLog" parameterClass="AdjReqMgrVO">
|
||||
|
||||
|
||||
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#
|
||||
)
|
||||
|
||||
|
||||
</insert>
|
||||
|
||||
@ -408,4 +408,12 @@
|
||||
|
||||
</select>
|
||||
|
||||
<select id="loginDAO.selectUniqueId" parameterClass="String" resultClass="String">
|
||||
|
||||
SELECT esntl_id as esntlId
|
||||
FROM LETTNEMPLYRINFO
|
||||
WHERE EMPLYR_ID = #id#
|
||||
|
||||
</select>
|
||||
|
||||
</sqlMap>
|
||||
|
||||
@ -77,7 +77,14 @@ function actionLogin() {
|
||||
} else if (document.loginForm.password_text.value =="") {
|
||||
alert("비밀번호를 입력하세요");
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
<c:if test="${mode == 'OTP'}">
|
||||
else if (document.loginForm.checkNo.value ==""){
|
||||
alert("인증번호를 입력하세요.");
|
||||
return false;
|
||||
}
|
||||
</c:if>
|
||||
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);
|
||||
|
||||
@ -205,7 +224,7 @@ function optCertNumSms(){
|
||||
<p>휴대폰번호</p>
|
||||
<label for="phone"></label>
|
||||
<input type="text" name="phone" id="phone" placeholder="휴대폰번호를 입력해주세요." />
|
||||
<button type="button" class="otp_phone_btn">인증번호받기</button>
|
||||
<button type="button" class="otp_phone_btn" onclick="optCertNumSms();">인증번호받기</button>
|
||||
</div>
|
||||
<div class="id_box otp_phone_box">
|
||||
<p>인증번호 입력</p>
|
||||
@ -230,8 +249,8 @@ function optCertNumSms(){
|
||||
</form:form>
|
||||
|
||||
<form id="certForm" name="certForm" method="post" action="">
|
||||
<input type="hidden" name="frstRegisterId" id="frstRegisterId" value="<c:out value='${id}'/>"/>
|
||||
<input type="hidden" name="phone" id="phone" value=""/>
|
||||
<input type="hidden" name="userId" id="userId" value="<c:out value='${id}'/>"/>
|
||||
<input type="hidden" name="trPhone" id="trPhone" value=""/>
|
||||
|
||||
</form>
|
||||
</body>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user