Merge branch 'tolag3'

This commit is contained in:
LJH 2022-10-13 09:33:28 +09:00
commit 68d778f3e4
11 changed files with 213 additions and 60 deletions

View File

@ -124,6 +124,8 @@ public class LoginVO implements Serializable{
/*20221012 대시보드를 위해 직급 코드 추가*/ /*20221012 대시보드를 위해 직급 코드 추가*/
private String ofcpsNm; private String ofcpsNm;
private String phone;
public String getId() { public String getId() {
return id; return id;
} }
@ -429,5 +431,13 @@ public class LoginVO implements Serializable{
public void setCertNum(String certNum) { public void setCertNum(String certNum) {
this.certNum = certNum; this.certNum = certNum;
} }
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
} }

View File

@ -252,6 +252,10 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
* */ * */
private String smsSendSeq; // SMS 발송 로그 PK private String smsSendSeq; // SMS 발송 로그 PK
private String phone; // 수신번호
private String userId;
private String smsSendTypeCd; // 발송유형 - CC052
private String certNum;
public AdjReqMgrVO getAdrVO() { public AdjReqMgrVO getAdrVO() {
return adrVO; return adrVO;
@ -1193,9 +1197,30 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
public void setSmsSendSeq(String smsSendSeq) { public void setSmsSendSeq(String smsSendSeq) {
this.smsSendSeq = 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;
}
} }

View File

@ -13,6 +13,7 @@ import java.net.URLEncoder;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -705,15 +706,16 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수 int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수
if (bytes > 90) { if (bytes > 90) {
sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클) // sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정 adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정
} else { } else {
sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클) // sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정 adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정
} }
//sms 발송 관리 테이블에 저장 //sms 발송 관리 테이블에 저장
adjReqMgrVO.setRpplNm(""); adjReqMgrVO.setRpplNm("");
// SMS 발송 로그 pk idgen
String smsSendSeq = idgenService.getNextStringId(); String smsSendSeq = idgenService.getNextStringId();
adjReqMgrVO.setSmsSendSeq(smsSendSeq); adjReqMgrVO.setSmsSendSeq(smsSendSeq);

View File

@ -1,33 +1,38 @@
package kcc.kccadr.kccadrCom.web; package kcc.kccadr.kccadrCom.web;
import java.text.SimpleDateFormat; import kcc.com.cmm.LoginVO;
import java.util.Calendar; import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import java.util.Date;
import kcc.let.uss.umt.service.UserManageVO; public class OtpCertUtil {
public class otpCertUtil {
/** /**
* @Method Name : mjonSmsCertCheck * @Method Name : otpCert
* @작성일 : 2022. 8. 25. * @작성일 : 2022. 10. 12.
* @작성자 : 이준호 * @작성자 : 이준호
* @Method 설명 : 미허용 IP 관리자 페이지 로그인 SMS인증번호 체크 * @Method 설명 : OTP 문자인증 인증번호 검증
*/ */
public String otpCertUtil(String phone, String certNum, String mberId) throws Exception{ public String otpCert(LoginVO loginVO_P, LoginVO loginVO_R) throws Exception{
// try { 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); // sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO);
// if (sendLogVO == null) { // if (sendLogVO == null) {
@ -58,10 +63,10 @@ public class otpCertUtil {
// return "timeOut"; // return "timeOut";
// } // }
// } // }
return "";
// } catch (Exception e) { } catch (Exception e) {
return "exception"; return "exception";
// } }
// }
} }
} }

View File

@ -88,4 +88,6 @@ public interface EgovLoginService {
void updatePassMissReset(LoginVO loginVO) throws Exception; void updatePassMissReset(LoginVO loginVO) throws Exception;
void updateEmplyrSttusCode(LoginVO loginVO) throws Exception; void updateEmplyrSttusCode(LoginVO loginVO) throws Exception;
String selectUniqueId(String str) throws Exception;
} }

View File

@ -275,5 +275,10 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements
loginDAO.updateEmplyrSttusCode(loginVO); loginDAO.updateEmplyrSttusCode(loginVO);
} }
@Override
public String selectUniqueId(String str) throws Exception{
return loginDAO.selectUniqueId(str);
}
} }

View File

@ -133,4 +133,8 @@ public class LoginDAO extends EgovAbstractDAO {
return (String)select("loginDAO.selectLoginType", str); return (String)select("loginDAO.selectLoginType", str);
} }
public String selectUniqueId(String str) throws Exception{
return (String)select("loginDAO.selectUniqueId", str);
}
} }

View File

@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Random;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.script.ScriptEngineManager; import javax.script.ScriptEngineManager;
@ -67,6 +68,7 @@ import kcc.com.cmm.util.StringUtil;
import kcc.com.cmm.util.WebUtil; import kcc.com.cmm.util.WebUtil;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO; import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.cmm.service.SMSOracleService; 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.EgovLoginLogService;
import kcc.let.sym.log.clg.service.LoginLog; import kcc.let.sym.log.clg.service.LoginLog;
import kcc.let.sym.mnu.mpm.service.MenuManageJTreeVO; import kcc.let.sym.mnu.mpm.service.MenuManageJTreeVO;
@ -176,6 +178,9 @@ public class EgovLoginController {
@Resource(name = "SMSOracleService") @Resource(name = "SMSOracleService")
private SMSOracleService sMSOracleService; private SMSOracleService sMSOracleService;
@Resource(name = "MjonSmsCertSendUtil")
private OtpCertUtil otpCertUtil;
/* /*
*//** *//**
@ -553,30 +558,30 @@ public class EgovLoginController {
*/ */
Boolean otpCertFlag = false; 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 callTo = resultVO.getMoblphonNo();
// String checkNo = loginVO.getCheckNo(); // String checkNo = loginVO.getCheckNo();
// String mberId = resultVO.getId(); // String mberId = resultVO.getId();
//
// /* /*
// * 인증번호 비교 * 인증번호 비교
// * return * return
// * empty = "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요." * empty = "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요."
// * success = "5분이내 발송 내역 비교, 인증번호 비교 시 일치" * success = "5분이내 발송 내역 비교, 인증번호 비교 시 일치"
// * smsCertFlag = true * smsCertFlag = true
// * checkNoFail = "인증번호를 확인해 주세요" * checkNoFail = "인증번호를 확인해 주세요"
// * timeOut = "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다." * timeOut = "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다."
// * Exception = "에러가 발생하였습니다. 다시 시도해 주세요. \\n 에러가 지속될 시 최고관리자에게 문의하세요."; * Exception = "에러가 발생하였습니다. 다시 시도해 주세요. \\n 에러가 지속될 시 최고관리자에게 문의하세요.";
// * final = "exception"; * final = "exception";
// * *
// * 실패 passMiss 숫자++ update * 실패 passMiss 숫자++ update
// * loginService.updatePassMissPlus(loginVO); * loginService.updatePassMissPlus(loginVO);
// * *
// * */ * */
// String result = otpCertUtil.otpCertUtil(callTo, checkNo, mberId); 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", "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요.");
@ -622,8 +627,8 @@ public class EgovLoginController {
// initRsa(request); // initRsa(request);
// return "uat/uia/EgovLoginUsr"; // return "uat/uia/EgovLoginUsr";
// } // }
// } }
//
if (loginService.getUserAuth(resultVO) != null) { if (loginService.getUserAuth(resultVO) != null) {
resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority()); resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority());
} }
@ -2293,12 +2298,58 @@ public class EgovLoginController {
ModelAndView modelAndView = new ModelAndView(); ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView"); 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; 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 { class RequestWrapperForSecurity extends HttpServletRequestWrapper {

View File

@ -226,7 +226,29 @@
<insert id="MsgMgrDAO.insertAdrOtpCertNumSmsLog" parameterClass="AdjReqMgrVO"> <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> </insert>

View File

@ -408,4 +408,12 @@
</select> </select>
<select id="loginDAO.selectUniqueId" parameterClass="String" resultClass="String">
SELECT esntl_id as esntlId
FROM LETTNEMPLYRINFO
WHERE EMPLYR_ID = #id#
</select>
</sqlMap> </sqlMap>

View File

@ -77,7 +77,14 @@ function actionLogin() {
} else if (document.loginForm.password_text.value =="") { } else if (document.loginForm.password_text.value =="") {
alert("비밀번호를 입력하세요"); alert("비밀번호를 입력하세요");
return false; return false;
} else { }
<c:if test="${mode == 'OTP'}">
else if (document.loginForm.checkNo.value ==""){
alert("인증번호를 입력하세요.");
return false;
}
</c:if>
else {
// var rsa = new RSAKey(); // var rsa = new RSAKey();
// rsa.setPublic($('#RSAModulus').val(),$('#RSAExponent').val()); // rsa.setPublic($('#RSAModulus').val(),$('#RSAExponent').val());
@ -131,10 +138,22 @@ function getid(form){
form.checkId.checked = ((form.id_text.value = getCookie("ncms_saveid")) != ""); form.checkId.checked = ((form.id_text.value = getCookie("ncms_saveid")) != "");
} }
function validation(){
if(document.loginForm.phone.value == ''){
alert('휴대폰번호를 입력해주세요.');
return false;
}
return true;
}
// OTP 문자인증 문자발송 Ajax // OTP 문자인증 문자발송 Ajax
function optCertNumSms(){ 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); var data = new FormData(document.certForm);
@ -205,7 +224,7 @@ function optCertNumSms(){
<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" placeholder="휴대폰번호를 입력해주세요." />
<button type="button" class="otp_phone_btn">인증번호받기</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">
<p>인증번호 입력</p> <p>인증번호 입력</p>
@ -230,8 +249,8 @@ function optCertNumSms(){
</form:form> </form:form>
<form id="certForm" name="certForm" method="post" action=""> <form id="certForm" name="certForm" method="post" action="">
<input type="hidden" name="frstRegisterId" id="frstRegisterId" value="<c:out value='${id}'/>"/> <input type="hidden" name="userId" id="userId" value="<c:out value='${id}'/>"/>
<input type="hidden" name="phone" id="phone" value=""/> <input type="hidden" name="trPhone" id="trPhone" value=""/>
</form> </form>
</body> </body>