Merge branch 'master' of

http://subsub8729@vcs.iten.co.kr:9999/hylee/mjon_git

Conflicts:
	src/main/webapp/publish/mypage_index_2024.html
This commit is contained in:
subsub 2024-11-22 12:29:20 +09:00
commit cf35c07140
33 changed files with 1043 additions and 123 deletions

View File

@ -114,6 +114,11 @@ public class LoginVO implements Serializable{
private String dormantYn; // 휴먼회원여부 ( N:일반회원, Y:휴먼회원)
/**
* 보안로그인 여부
*/
private String secuLoginFlag;
public String getDormantYn() {
return dormantYn;
}
@ -411,5 +416,12 @@ public class LoginVO implements Serializable{
public void setOuterCertYn(String outerCertYn) {
this.outerCertYn = outerCertYn;
}
public String getSecuLoginFlag() {
return secuLoginFlag;
}
public void setSecuLoginFlag(String secuLoginFlag) {
this.secuLoginFlag = secuLoginFlag;
}
}

View File

@ -1,5 +1,7 @@
package itn.let.cert.ip.service;
import java.util.List;
import itn.let.mail.service.StatusResponse;
public interface CertIpService {
@ -22,6 +24,11 @@ public interface CertIpService {
public StatusResponse deleteCertIp(MberCertIpVO mberCertIpVO);
public Boolean checkCertIp(MberCertIpVO mberCertIpVO);
public Boolean checkRegCertIp(MberCertIpVO mberCertIpVO);
}

View File

@ -0,0 +1,19 @@
package itn.let.cert.ip.service;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import egovframework.rte.fdl.cmmn.exception.FdlException;
public interface CertLoginLogService {
public void insertCertLoginLog(MberCertLoginLogVO mberCertLoginLogVO, HttpServletRequest request) throws FdlException;
public List<MberCertLoginLogVO> findAllCertLoginLogVO(MberCertLoginLogVO mberCertLoginLogVO);
}

View File

@ -0,0 +1,76 @@
package itn.let.cert.ip.service;
import itn.let.uss.umt.service.UserDefaultVO;
/**
*
* @author : 이호영
* @fileName : MberCertLoginLogVO.java
* @date : 2024.11.21
* @description : 로그인 이력관리 92동안만 관리하고 삭제
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2024.11.21 이호영 최초 생성
*
*
*
*/
public class MberCertLoginLogVO extends UserDefaultVO{
/**
* @description :
*/
private static final long serialVersionUID = 1L;
private String certLoginId;
private String loginId;
private String loginIp;
private String loginDevice;
private String loginDt;
private String secuLoginFlag;
public String getCertLoginId() {
return certLoginId;
}
public void setCertLoginId(String certLoginId) {
this.certLoginId = certLoginId;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public String getLoginDevice() {
return loginDevice;
}
public void setLoginDevice(String loginDevice) {
this.loginDevice = loginDevice;
}
public String getLoginDt() {
return loginDt;
}
public void setLoginDt(String loginDt) {
this.loginDt = loginDt;
}
public String getSecuLoginFlag() {
return secuLoginFlag;
}
public void setSecuLoginFlag(String secuLoginFlag) {
this.secuLoginFlag = secuLoginFlag;
}
}

View File

@ -27,5 +27,13 @@ public class CertIpDAO extends EgovAbstractDAO {
public MberCertIpVO findByMberCertIpList(MberCertIpVO mberCertIpVO) {
return (MberCertIpVO) select("MberCertIpVO.findByMberCertIpList", mberCertIpVO);
}
public List<MberCertIpVO> checkCertIp(MberCertIpVO mberCertIpVO) {
return (List<MberCertIpVO>) list("MberCertIpVO.checkCertIp", mberCertIpVO);
}
public List<MberCertIpVO> checkRegCertIp(MberCertIpVO mberCertIpVO) {
return (List<MberCertIpVO>) list("MberCertIpVO.checkRegCertIp", mberCertIpVO);
}
}

View File

@ -21,8 +21,8 @@ public class CertIpServiceImpl extends EgovAbstractServiceImpl implements CertIp
@Override
public StatusResponse selectMberCertIpList(MberCertIpVO mberCertPhoneVO) {
List<MberCertIpVO> mberCertIpListVO = certIpDAO.selectMberCertIpList(mberCertPhoneVO);
public StatusResponse selectMberCertIpList(MberCertIpVO mberCertIpVO) {
List<MberCertIpVO> mberCertIpListVO = certIpDAO.selectMberCertIpList(mberCertIpVO);
return new StatusResponse(HttpStatus.OK, mberCertIpListVO, LocalDateTime.now());
}
@ -43,5 +43,26 @@ public class CertIpServiceImpl extends EgovAbstractServiceImpl implements CertIp
certIpDAO.deleteCertIp(mberCertIpVO);
return new StatusResponse(HttpStatus.OK, "삭제 하였습니다.", LocalDateTime.now());
}
@Override
public Boolean checkCertIp(MberCertIpVO mberCertIpVO) {
List<MberCertIpVO> mberCertIpListVO = certIpDAO.checkCertIp(mberCertIpVO);
if(mberCertIpListVO.size()>0) {
return true;
}else {
return false;
}
}
@Override
public Boolean checkRegCertIp(MberCertIpVO mberCertIpVO) {
List<MberCertIpVO> mberCertIpListVO = certIpDAO.checkRegCertIp(mberCertIpVO);
if(mberCertIpListVO.size()>0) {
return true;
}else {
return false;
}
}
}

View File

@ -0,0 +1,47 @@
package itn.let.cert.ip.service.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import itn.let.cert.ip.service.MberCertLoginLogVO;
@Repository("CertLoginLogDAO")
public class CertLoginLogDAO extends EgovAbstractDAO {
/*
public List<MberCertIpVO> selectMberCertIpList(MberCertIpVO mberCertIpVO) {
return (List<MberCertIpVO>) list("MberCertIpVO.selectMberCertIpList", mberCertIpVO);
}
public void insertCertIp(MberCertIpVO mberCertIpVO) {
insert("MberCertIpVO.insertCertIp", mberCertIpVO);
}
public void deleteCertIp(MberCertIpVO mberCertIpVO) {
insert("MberCertIpVO.deleteCertIp", mberCertIpVO);
}
public MberCertIpVO findByMberCertIpList(MberCertIpVO mberCertIpVO) {
return (MberCertIpVO) select("MberCertIpVO.findByMberCertIpList", mberCertIpVO);
}
*/
public void insertCertLoginLog(MberCertLoginLogVO mberCertLoginLogVO) {
insert("MberCertLoginLogVO.insertCertLoginLog", mberCertLoginLogVO);
}
public int checkLoginIpExists(MberCertLoginLogVO mberCertLoginLogVO) {
return (int) select("MberCertLoginLogVO.checkLoginIpExists", mberCertLoginLogVO);
}
public void updateCertLoginLog(MberCertLoginLogVO mberCertLoginLogVO) {
insert("MberCertLoginLogVO.updateCertLoginLog", mberCertLoginLogVO);
}
public List<MberCertLoginLogVO> findAllCertLoginLogVO(MberCertLoginLogVO mberCertLoginLogVO) {
return (List<MberCertLoginLogVO>) list("MberCertLoginLogVO.findAllCertLoginLogVO", mberCertLoginLogVO);
}
}

View File

@ -0,0 +1,87 @@
package itn.let.cert.ip.service.impl;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.cmmn.exception.FdlException;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.let.cert.ip.service.CertLoginLogService;
import itn.let.cert.ip.service.MberCertLoginLogVO;
@Service("CertLoginLogService")
public class CertLoginLogServiceImpl extends EgovAbstractServiceImpl implements CertLoginLogService {
@Resource(name = "CertLoginLogDAO")
private CertLoginLogDAO certLoginLogDAO;
@Resource(name = "egovMjonCertLoginLogIdGnrService")
private EgovIdGnrService certLoginLogIdGnrService;
/*
@Override
public StatusResponse selectMberCertIpList(MberCertIpVO mberCertPhoneVO) {
List<MberCertIpVO> mberCertIpListVO = certLoginLogDAO.selectMberCertIpList(mberCertPhoneVO);
return new StatusResponse(HttpStatus.OK, mberCertIpListVO, LocalDateTime.now());
}
@Override
public StatusResponse insertCertIp(MberCertIpVO mberCertIpVO) {
MberCertIpVO mberCertIpListVO = certLoginLogDAO.findByMberCertIpList(mberCertIpVO);
if(mberCertIpListVO != null) {
return new StatusResponse(HttpStatus.CONFLICT, "중복 IP입니다.", LocalDateTime.now());
}
certLoginLogDAO.insertCertIp(mberCertIpVO);
return new StatusResponse(HttpStatus.OK, "등록 하였습니다.", LocalDateTime.now());
}
@Override
public StatusResponse deleteCertIp(MberCertIpVO mberCertIpVO) {
certLoginLogDAO.deleteCertIp(mberCertIpVO);
return new StatusResponse(HttpStatus.OK, "삭제 하였습니다.", LocalDateTime.now());
}
*/
@Override
public void insertCertLoginLog(MberCertLoginLogVO mberCertLoginLogVO, HttpServletRequest request) throws FdlException {
// int count = certLoginLogDAO.checkLoginIpExists(mberCertLoginLogVO);
//
// if (count > 0) {
// // 이미 존재하면 UPDATE
// certLoginLogDAO.updateCertLoginLog(mberCertLoginLogVO);
// } else {
mberCertLoginLogVO.setCertLoginId(certLoginLogIdGnrService.getNextStringId());
mberCertLoginLogVO.setLoginDevice(getDevice(request));
certLoginLogDAO.insertCertLoginLog(mberCertLoginLogVO);
// }
}
private String getDevice(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent").toLowerCase();
if (userAgent.contains("mobile") || userAgent.contains("android") || userAgent.contains("iphone")) {
return "M";
} else if (userAgent.contains("tablet") || userAgent.contains("ipad")) {
return "T";
} else {
return "D";
}
}
@Override
public List<MberCertLoginLogVO> findAllCertLoginLogVO(MberCertLoginLogVO mberCertLoginLogVO) {
// TODO Auto-generated method stub
return certLoginLogDAO.findAllCertLoginLogVO(mberCertLoginLogVO);
}
}

View File

@ -3,6 +3,7 @@ package itn.let.cert.ip.web;
import java.time.LocalDateTime;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
@ -17,6 +18,7 @@ import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cert.ip.service.CertIpService;
import itn.let.cert.ip.service.MberCertIpVO;
import itn.let.mail.service.StatusResponse;
import itn.let.utl.sim.service.EgovClntInfo;
/**
*
@ -79,6 +81,29 @@ public class CertIpController {
return ResponseEntity.ok().body(certIpService.insertCertIp(mberCertIpVO));
}
@RequestMapping(value = {"/cert/ip/insertCennetCertIp.do"})
public ResponseEntity<StatusResponse> insertCennetCertIp(MberCertIpVO mberCertIpVO,HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertIpVO.setFrstRegisterId(userId);
mberCertIpVO.setMberId(userId);
mberCertIpVO.setCertIp(EgovClntInfo.getClntIP(request));
mberCertIpVO.setCertMemo("허용 IP 등록");
return ResponseEntity.ok().body(certIpService.insertCertIp(mberCertIpVO));
}
@RequestMapping(value = {"/cert/ip/deleteCertIp.do"})
public ResponseEntity<StatusResponse> deleteCertIp(MberCertIpVO mberCertIpVO) throws Exception {

View File

@ -0,0 +1,102 @@
package itn.let.cert.ip.web;
import java.time.LocalDateTime;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cert.ip.service.CertLoginLogService;
import itn.let.cert.ip.service.MberCertIpVO;
import itn.let.mail.service.StatusResponse;
/**
*
* @author : 이호영
* @fileName : CertIpController.java
* @date : 2024.11.19
* @description : 허용 IP 관련 컨트롤러
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2024.11.19 이호영 최초 생성
*
*
*
*/
@Controller
public class CertLoginLogController {
/* CertLoginLogService */
@Resource(name = "CertLoginLogService")
private CertLoginLogService certLoginLogService;
/*
@RequestMapping(value = {"/cert/ip/selectMberCertIpList.do"})
public ResponseEntity<StatusResponse> selectMberCertIpList(MberCertIpVO mberCertPhoneVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertPhoneVO.setMberId(userId);
return ResponseEntity.ok().body(certLoginLogService.selectMberCertIpList(mberCertPhoneVO));
}
@RequestMapping(value = {"/cert/ip/insertCertIp.do"})
public ResponseEntity<StatusResponse> insertCertIp(MberCertIpVO mberCertIpVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertIpVO.setFrstRegisterId(userId);
mberCertIpVO.setMberId(userId);
return ResponseEntity.ok().body(certLoginLogService.insertCertIp(mberCertIpVO));
}
@RequestMapping(value = {"/cert/ip/deleteCertIp.do"})
public ResponseEntity<StatusResponse> deleteCertIp(MberCertIpVO mberCertIpVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertIpVO.setLastUpdusrId(userId);
mberCertIpVO.setMberId(userId);
return ResponseEntity.ok().body(certLoginLogService.deleteCertIp(mberCertIpVO));
}
*/
}

View File

@ -29,11 +29,22 @@ public class CertPhoneServiceImpl extends EgovAbstractServiceImpl implements Cer
@Override
public StatusResponse insertCertPhone(MberCertPhoneVO mberCertPhoneVO, String moblphonNo) {
MberCertPhoneVO mberCertPhoneListVO = certPhoneDAO.findByCertPhoneInfo(mberCertPhoneVO);
if(mberCertPhoneListVO != null || mberCertPhoneListVO.getMbtlnum().equals(moblphonNo) ) {
return new StatusResponse(HttpStatus.CONFLICT, "중복 번호입니다.", LocalDateTime.now());
System.out.println("findByCertPhoneInfo : :::: ");
try {
MberCertPhoneVO mberCertPhoneListVO = certPhoneDAO.findByCertPhoneInfo(mberCertPhoneVO);
if(mberCertPhoneListVO != null) {
if(mberCertPhoneListVO.getMbtlnum().equals(moblphonNo)) {
return new StatusResponse(HttpStatus.CONFLICT, "중복 번호입니다.", LocalDateTime.now());
}
}
certPhoneDAO.insertCertPhone(mberCertPhoneVO);
} catch (Exception e) {
e.printStackTrace(); // TODO: handle exception
return new StatusResponse(HttpStatus.OK, "오류가 발생하였습니다.", LocalDateTime.now());
}
certPhoneDAO.insertCertPhone(mberCertPhoneVO);
return new StatusResponse(HttpStatus.OK, "등록 하였습니다.", LocalDateTime.now());
}

View File

@ -91,6 +91,9 @@ public class CertPhoneController {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
System.out.println(" :: insertCertPhone :: ");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
@ -119,7 +122,9 @@ public class CertPhoneController {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertPhoneVO.setFrstRegisterId(userId);
mberCertPhoneVO.setMberId(userId);
if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
mberCertPhoneVO.setMberId(userId);
}
return ResponseEntity.ok().body(certPhoneService.updateMberCertPhone(mberCertPhoneVO));
@ -139,8 +144,10 @@ public class CertPhoneController {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertPhoneVO.setLastUpdusrId(userId);
mberCertPhoneVO.setMberId(userId);
if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
mberCertPhoneVO.setMberId(userId);
}
return ResponseEntity.ok().body(certPhoneService.deleteCertPhone(mberCertPhoneVO));
@ -153,6 +160,7 @@ public class CertPhoneController {
@RequestMapping(value = {"/cert/phone/sendSysMsgDataAjax.do"})
public ResponseEntity<StatusResponse> sendSysMsgDataAjax(MberCertPhoneVO mberCertPhoneVO) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

View File

@ -825,7 +825,7 @@ public class EgovMainController {
try {
//0번째 부터 6개의 항목만 조회
MjonMsgVO mjonMsgVO = new MjonMsgVO();
adminMemLoginThisMonth = mjonMsgService.selectMemLoginThisMonth(mjonMsgVO);
//adminMemLoginThisMonth = mjonMsgService.selectMemLoginThisMonth(mjonMsgVO);
}
catch(Exception e) {
isSuccess = false;

View File

@ -604,6 +604,15 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement
return resultCnt;
}
@Override
public String getSecuLoginFlag(String id) {
// TODO Auto-generated method stub
return mberManageDAO.getSecuLoginFlag(id);
}
public void updateSecureLoginFlag(MberManageVO mberManageVO) throws Exception {
mberManageDAO.updateSecureLoginFlag(mberManageVO);
}
}

View File

@ -332,5 +332,13 @@ public class MberManageDAO extends EgovComAbstractDAO{
return resultCnt;
}
public String getSecuLoginFlag(String id) {
return (String)select("mberManageDAO.getSecuLoginFlag", id);
}
public void updateSecureLoginFlag(MberManageVO mberManageVO) throws Exception {
update("mberManageDAO.updateSecureLoginFlag",mberManageVO);
}
}

View File

@ -83,6 +83,10 @@ import itn.com.cmm.util.StringUtil;
import itn.com.cmm.util.WebUtil;
import itn.com.uss.olh.hpc.service.HackIpService;
import itn.com.uss.olh.hpc.service.HackIpVO;
import itn.let.cert.ip.service.CertIpService;
import itn.let.cert.ip.service.CertLoginLogService;
import itn.let.cert.ip.service.MberCertIpVO;
import itn.let.cert.ip.service.MberCertLoginLogVO;
import itn.let.cert.phone.service.CertPhoneService;
import itn.let.cert.phone.service.MberCertPhoneVO;
import itn.let.cop.bbs.service.BoardVO;
@ -242,6 +246,12 @@ public class EgovLoginController {
@Resource(name = "CertPhoneService")
private CertPhoneService certPhoneService;
@Resource(name = "CertLoginLogService")
private CertLoginLogService certLoginLogService;
@Resource(name = "CertIpService")
private CertIpService certIpService;
private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class);
/* 문자온 사용자 로그인 시작 */
@ -1111,6 +1121,7 @@ public class EgovLoginController {
// 공인 IP 구하기
String userIp = EgovClntInfo.getClntIP(request);
System.out.println("userIp :: "+userIp);
// java.util.Scanner s = new java.util.Scanner(new
// java.net.URL("https://api.ipify.org").openStream(),
// "UTF-8").useDelimiter("\\A");
@ -2066,6 +2077,35 @@ public class EgovLoginController {
modelAndView.addObject("data", resultVO);
modelAndView.addObject("mberCertPhoneList", mberCertPhoneList);
/* 일시 : 2024.11.21
* 내용 : 패스 인증 조회
* 작업자 : 이호영
*/
String userId = loginVO.getId();
// lettngnrlmber TB에 secuLoginFlag 값이 Y면 인증 해야함
String secuLoginFlag = mberManageService.getSecuLoginFlag(userId);
String passFlag = "Y";
if("Y".equals(secuLoginFlag)) {
// lettngnrlmber TB에 secuLoginFlag 값이 Y면
// IP가 등록 되어 있는지 확인
// 있으면 2차인증 안함
// 없으면 2차인증 진행
MberCertIpVO mberCertIpVO = new MberCertIpVO();
mberCertIpVO.setCertIp(userIp);
mberCertIpVO.setMberId(userId);
// ip가 있으면 true
if(!certIpService.checkCertIp(mberCertIpVO)) {
passFlag = "N";
}
}
modelAndView.addObject("passFlag", passFlag);
return modelAndView;
@ -2461,14 +2501,24 @@ public class EgovLoginController {
sendLogVO.setSendId(id);
sendLogVO.setReceive(s_hp);
sendLogVO.setCheckNo(s_num);
sendLogVO = mjonMsgDataService.selectSysMsgLogCheck(sendLogVO);
if (sendLogVO==null) {
redirectAttributes.addFlashAttribute("fail2", true);
return "redirect:/web/user/login/login.do";
}
String passFlag = request.getParameter("passFlag");
System.out.println("passFlag : "+ passFlag);
System.out.println("passFlag : "+ passFlag);
System.out.println("passFlag : "+ passFlag);
System.out.println("passFlag : "+ passFlag);
System.out.println("passFlag : "+ passFlag);
System.out.println("passFlag : "+ passFlag);
if("Y".equals(passFlag)) {
sendLogVO = mjonMsgDataService.selectSysMsgLogCheck(sendLogVO);
if (sendLogVO==null) {
redirectAttributes.addFlashAttribute("fail2", true);
return "redirect:/web/user/login/login.do";
}
}
String password = decryptRsa(privateKey, loginVO.getPassword());
loginVO.setId(id);
@ -2664,7 +2714,14 @@ public class EgovLoginController {
loginVO.getIp();
loginVO.setMessage("로그인 성공되었습니다.");
loginVO.setLoginYn("Y");
loginService.insertActionLoginLog(loginVO);
// 인증 로그인 이력을 위한 insert
MberCertLoginLogVO mberCertLoginLogVO = new MberCertLoginLogVO();
mberCertLoginLogVO.setLoginId(loginVO.getId());
mberCertLoginLogVO.setLoginIp(loginVO.getIp());
certLoginLogService.insertCertLoginLog(mberCertLoginLogVO, request);
}
// 등급제 Start

View File

@ -16,9 +16,12 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@ -41,6 +44,10 @@ import itn.com.cmm.util.MJUtil;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cert.ip.service.CertIpService;
import itn.let.cert.ip.service.CertLoginLogService;
import itn.let.cert.ip.service.MberCertIpVO;
import itn.let.cert.ip.service.MberCertLoginLogVO;
import itn.let.fax.user.service.FaxGroupDataVO;
import itn.let.fax.user.service.FaxService;
import itn.let.kakao.user.sent.service.KakaoSentService;
@ -70,6 +77,7 @@ import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.sim.service.EgovClntInfo;
import itn.let.utl.user.service.MjonNoticeSendUtil;
/**
@ -164,6 +172,14 @@ public class EgovMypageController {
/** 등급제 관리 서비스 */
@Resource(name = "mberGrdService")
MberGrdService mberGrdService;
// /* CertLoginLogService */
@Resource(name = "CertLoginLogService")
private CertLoginLogService certLoginLogService;
// /* CertLoginLogService */
@Resource(name = "CertIpService")
private CertIpService certIpService;
/**
* 마이페이지 비밀번호 변경
@ -2927,13 +2943,62 @@ public class EgovMypageController {
* 회원탈퇴 본인인증 화면
*/
@RequestMapping(value="/web/user/mberSecureLogin.do")
public String secureLogin(@ModelAttribute MberManageVO mberManageVO
public String secureLogin(@ModelAttribute("mberCertLoginLogVO") MberCertLoginLogVO mberCertLoginLogVO
, ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
// secuLoginFlag 값을 Model에 추가
model.addAttribute("secuLoginFlag", mberCertLoginLogVO.getSecuLoginFlag());
System.out.println(mberCertLoginLogVO.getSecuLoginFlag());
//로그인 권한정보 불러오기
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mberCertLoginLogVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mberCertLoginLogVO.getPageUnit());
paginationInfo.setPageSize(mberCertLoginLogVO.getPageSize());
mberCertLoginLogVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mberCertLoginLogVO.setLastIndex(paginationInfo.getLastRecordIndex());
mberCertLoginLogVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(mberCertLoginLogVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mberCertLoginLogVO.setSearchSortCnd("LOGIN_DT");
mberCertLoginLogVO.setSearchSortOrd("desc");
}
mberCertLoginLogVO.setLoginId(userId);
//전체 발송 리스트 불러오기
List<MberCertLoginLogVO> resultList = certLoginLogService.findAllCertLoginLogVO(mberCertLoginLogVO);
model.addAttribute("resultList", resultList);
model.addAttribute("resultListCnt", resultList.size());
paginationInfo.setTotalRecordCount( resultList.size()> 0 ? resultList.get(0).getTotCnt() : 0);
model.addAttribute("paginationInfo", paginationInfo);
// 접속 IP
String cennectIP = EgovClntInfo.getClntIP(request);
model.addAttribute("cennectIP", cennectIP);
// 접속 IP가 등록되어있는지 확인
MberCertIpVO mberCertIpVO = new MberCertIpVO();
mberCertIpVO.setCertIp(cennectIP);
mberCertIpVO.setMberId(userId);
model.addAttribute("chkcertRegIP", certIpService.checkRegCertIp(mberCertIpVO));
{
@ -2951,11 +3016,20 @@ public class EgovMypageController {
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
System.out.println("@@@ serverNm : " + serverNm);
AuthCertVO certVO = kmcCertCheck.authCertCheckNine(serverNm + "/web/user/selectSecurityAuthn.do", loginVO.getId());
model.addAttribute("certVO", certVO);
}
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
model.addAttribute("pageTab", "mberSecureLogin");
model.addAttribute("pageTab", "mberSecureLogin");
return "web/user/mberSecureLogin";
}
@ -3773,14 +3847,47 @@ public class EgovMypageController {
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_회원정보 변경");
certVO.setCertType("secureLoginOFF");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
model.addAttribute("kmcVO", kmcVO);
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
return "web/user/securityAuthnPage";
}
@RequestMapping(value="/web/user/mberSecureLoginAjax.do")
public ResponseEntity<?> mberSecureLoginAjax(MberManageVO mberManageVO, @RequestBody Map<String, String> params){
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if("Y".equals(params.get("secuLoginFlag"))) {
mberManageVO.setSecuLoginFlag("N");
}else {
mberManageVO.setSecuLoginFlag("Y");
}
mberManageVO.setMberId(userId);
mberManageVO.setLastUpdusrId(userId);
try {
mberManageService.updateSecureLoginFlag(mberManageVO);
return new ResponseEntity<>("success", HttpStatus.OK);
} catch (Exception e) {
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
return new ResponseEntity<>("fail", HttpStatus.OK);
}
}
}

View File

@ -617,6 +617,8 @@ public class KmcCertChecker {
String cpId = "MJOM1001"; // 회원사ID
String urlCode = "001014"; // URL코드
//kmc 본인인증 /개발 서버 구분
System.out.println("@@@@@ trUrl : " + trUrl);
if(trUrl.contains("192.168.0.60") || trUrl.contains("localhost")) {
urlCode = "010001";
}

View File

@ -243,4 +243,9 @@ public interface EgovMberManageService {
//기업회원 기업정보 변경신청 취소 처리
public int updateCmpUserInfoCancel(MberManageVO mberManageVO) throws Exception;
public String getSecuLoginFlag(String id);
public void updateSecureLoginFlag(MberManageVO mberManageVO) throws Exception;
}

View File

@ -504,6 +504,12 @@ public class MberManageVO extends UserDefaultVO{
private String dormantDate;
private String spamYn;
/**
* 보안로그인 여부
*/
private String secuLoginFlag;
public String getSpamYn() {
return spamYn;
}
@ -1784,5 +1790,12 @@ public class MberManageVO extends UserDefaultVO{
public void setHotlineAgentCode(String hotlineAgentCode) {
this.hotlineAgentCode = hotlineAgentCode;
}
public String getSecuLoginFlag() {
return secuLoginFlag;
}
public void setSecuLoginFlag(String secuLoginFlag) {
this.secuLoginFlag = secuLoginFlag;
}
}

View File

@ -1223,6 +1223,13 @@ public class MainController {
model.addAttribute("userCandidateYn", userCandidateYn);
if(loginVO != null) {
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
}
return "web/com/webCommonHeader";
}

View File

@ -2849,5 +2849,24 @@
<property name="cipers" value="13" />
<property name="fillChar" value="0" />
</bean>
<!-- 문자온 로그인LOG ID Generation Strategy Config -->
<bean name="egovMjonCertLoginLogIdGnrService"
class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="strategy" ref="mjonCertLoginLogIdStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="IDS"/>
<property name="tableName" value="CERT_LOGIN_LOG_ID"/>
</bean>
<bean name="mjonCertLoginLogIdStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="CERTLOGINLOG_" />
<property name="cipers" value="10" />
<property name="fillChar" value="0" />
</bean>
</beans>

View File

@ -127,21 +127,21 @@
<!-- 14 -->
<!-- mj_msg_data 백업 -->
<bean id="MjMsgDataBackupBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- <bean id="MjMsgDataBackupBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="tableBackupMsgScheduling" />
<property name="targetMethod" value="mjMsgDataBackup" />
<property name="concurrent" value="false" />
</bean>
</bean> -->
<bean id="MjMsgDataBackupBeanTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="MjMsgDataBackupBean" />
<!-- <bean id="MjMsgDataBackupBeanTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> -->
<!-- <property name="jobDetail" ref="MjMsgDataBackupBean" /> -->
<!-- 매년 3,11월 22일 4시38분 마다 작년도 테이블 백업 -->
<property name="cronExpression" value="0 38 4 22 11 ?" />
<!-- <property name="cronExpression" value="0 38 4 22 11 ?" /> -->
<!-- <property name="cronExpression" value="0 38 4 28 3 ?" /> -->
<!-- 매일 4시18분 마다 작년도 테이블 백업 -->
<!-- <property name="cronExpression" value="0 03 12 * * ?" /> -->
<!-- <property name="cronExpression" value="8 * * * * ?" /> -->
</bean>
<!-- </bean> -->
@ -157,7 +157,7 @@
<!-- <ref bean="SttstMsgRankDayBeanTrigger" /> --><!-- 문자전송순위통계집계(매일한번) -->
<!-- mj_msg_data 백업 -->
<ref bean="MjMsgDataBackupBeanTrigger" />
<!-- <ref bean="MjMsgDataBackupBeanTrigger" /> -->
</list>
</property>

View File

@ -3,6 +3,7 @@
<sqlMapConfig>
<settings cacheModelsEnabled="true" useStatementNamespaces="true" />
<sqlMap resource="egovframework/sqlmap/let/cert/MjonCertIp_SQL_mysql.xml"/> <!-- 문자메세지 -->
<sqlMap resource="egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml"/> <!-- 문자메세지 -->
<sqlMap resource="egovframework/sqlmap/let/cert/MjonCertIp_SQL_mysql.xml"/> <!-- 로그인 허용 IP -->
<sqlMap resource="egovframework/sqlmap/let/cert/MjonCertLoginLog_SQL_mysql.xml"/> <!-- 로그인 허용 IP를 위한 로그인Log -->
<sqlMap resource="egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml"/> <!-- 로그인 인증 폰번호 -->
</sqlMapConfig>

View File

@ -23,7 +23,7 @@
where
MBER_ID = #mberId#
AND CERT_USE_YN = 'Y'
order by FRST_REGIST_PNTTM desc
order by FRST_REGIST_PNTTM asc
</select>
<select id="MberCertIpVO.findByMberCertIpList" parameterClass="mberCertIpVO" resultClass="mberCertIpVO">
@ -86,4 +86,33 @@
<select id="MberCertIpVO.checkCertIp" parameterClass="mberCertIpVO" resultClass="mberCertIpVO">
/*MberCertIpVO.checkCertIp*/
select
LOGIN_IP as certIp
from lettngnrlmber_cert_login_log_ip
where LOGIN_ID = #mberId#
and LOGIN_IP = #certIp#
union all
select
CERT_IP as certIp
from lettngnrlmber_cert_ip
where MBER_ID = #mberId#
and CERT_IP = #certIp#
AND CERT_USE_YN = 'Y'
</select>
<select id="MberCertIpVO.checkRegCertIp" parameterClass="mberCertIpVO" resultClass="mberCertIpVO">
/*MberCertIpVO.checkCennetIp*/
select
CERT_IP as certIp
from lettngnrlmber_cert_ip
where MBER_ID = #mberId#
and CERT_IP = #certIp#
AND CERT_USE_YN = 'Y'
</select>
</sqlMap>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?><!--
수정일 수정자 수정내용
========= ======= =================================================
2021.03.01 신명섭
-->
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="MjonCertLoginLog">
<typeAlias alias="mberCertLoginLogVO" type="itn.let.cert.ip.service.MberCertLoginLogVO"/>
<select id="MberCertLoginLogVO.findAllCertLoginLogVO" resultClass="mberCertLoginLogVO" parameterClass="mberCertLoginLogVO">
/*MberCertLoginLogVO.findAllCertLoginLogVO*/
SELECT
COUNT(CERT_LOGIN_ID) OVER() AS totCnt
, CERT_LOGIN_ID as certLoginId
, LOGIN_ID as loginId
, LOGIN_IP as loginIp
, CASE
WHEN LOGIN_DEVICE = 'D' THEN 'PC'
WHEN LOGIN_DEVICE IN ('M', 'T') THEN '모바일'
ELSE 'PC'
END AS loginDevice
, DATE_FORMAT(LOGIN_DT,'%Y-%m-%d %T') as loginDt
FROM LETTNGNRLMBER_CERT_LOGIN_LOG_IP
WHERE 1=1
and LOGIN_ID = #loginId#
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<select id="MberCertLoginLogVO.checkLoginIpExists" resultClass="int" parameterClass="mberCertLoginLogVO">
SELECT COUNT(1)
FROM LETTNGNRLMBER_CERT_LOGIN_LOG_IP
WHERE LOGIN_IP = #loginIp#
AND LOGIN_ID = #loginId#
</select>
<insert id="MberCertLoginLogVO.insertCertLoginLog" parameterClass="mberCertLoginLogVO">
INSERT INTO LETTNGNRLMBER_CERT_LOGIN_LOG_IP
(
CERT_LOGIN_ID,
LOGIN_ID,
LOGIN_IP,
LOGIN_DEVICE,
LOGIN_DT
)
VALUES
(
#certLoginId#,
#loginId#,
#loginIp#,
#loginDevice#,
NOW()
)
</insert>
<!-- LOGIN_IP가 존재할 경우 UPDATE -->
<update id="MberCertLoginLogVO.updateCertLoginLog" parameterClass="mberCertLoginLogVO">
UPDATE LETTNGNRLMBER_CERT_LOGIN_LOG_IP
SET LOGIN_DT = NOW()
WHERE LOGIN_IP = #loginIp#
AND LOGIN_ID = #loginId#
</update>
</sqlMap>

View File

@ -5972,6 +5972,7 @@
<!-- 당월 회원전환률 -->
<select id="mjonMsgDAO.selectMemLoginThisMonth" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
/* mjonMsgDAO.selectMemLoginThisMonth */
SELECT
M2.createDt
,M2.visitCnt

View File

@ -2106,4 +2106,21 @@
WHERE CMPHST_ID = #cmpHstId#
</update>
<select id="mberManageDAO.getSecuLoginFlag" resultClass="String" parameterClass="String">
select SECU_LOGIN_FLAG from lettngnrlmber where MBER_ID = #id#
</select>
<update id="mberManageDAO.updateSecureLoginFlag" parameterClass="mberVO">
UPDATE LETTNGNRLMBER SET
SECU_LOGIN_FLAG = #secuLoginFlag#
,LAST_UPDUSR_ID = #lastUpdusrId#
WHERE MBER_ID = #mberId#
</update>
</sqlMap>

View File

@ -1206,6 +1206,7 @@
, A.EMAIL_YN AS emailYN
, A.SMS_YN AS smsYN
, A.SECU_LOGIN_FLAG AS secuLoginFlag
FROM
LETTNGNRLMBER A

View File

@ -41,6 +41,42 @@
<script>
$(document).ready(function (){
$(document).on('click', '#secuLoginFlag', function () {
var secuLoginFlag = "";
console.log($(this).text());
if($(this).text() == 'ON'){
secuLoginFlag = 'Y'
}
else{
secuLoginFlag = 'N'
}
// 디버깅용 출력
console.log(secuLoginFlag);
// 동적으로 form 생성
var form = $('<form>', {
action: '/web/user/mberSecureLogin.do', // 전송할 URL
method: 'POST' // POST 방식 설정
});
// form에 hidden input 추가
form.append($('<input>', {
type: 'hidden',
name: 'secuLoginFlag', // 서버에서 받을 파라미터 이름
value: secuLoginFlag // 전달할 값
}));
// form을 body에 추가 후 제출
$('body').append(form);
form.submit();
});
//세션에서 종료시간을 받아와서 타이머 실행함
/* var timer = '${timer}';
if(timer != ""){
@ -109,6 +145,14 @@ $(document).ready(function (){
//등급제 시행 ON/OFF 체크(비로그인)
//getMberSettingDetailByNotLogin_Header();
var secuLoginFlag = '${mberManageVO.secuLoginFlag}';
if (secuLoginFlag === 'Y') {
$('#secuLoginFlag').attr('class', 'state on').text('ON');
} else if (secuLoginFlag === 'N') {
$('#secuLoginFlag').attr('class', 'state off').text('OFF');
}
});
//등급제 시행 ON/OFF 체크(비로그인)
@ -816,6 +860,8 @@ function actionLogin() {
window.open(target, 'infoPop', 'width=1110, height=700, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
}
</script>
<div class="mask"></div>
<c:if test="${inspYn == 'Y'}">
<style>
@ -1645,6 +1691,11 @@ function actionLogin() {
</div>
<button type="button" class="btnType btnType3" onclick="location.href='/web/user/mberInfoIndex.do'">마이페이지</button>
<button type="button" class="btnType btnType2" onclick="location.href='/web/uat/uia/actionLogout.do'">로그아웃</button>
<div class="security_box">
<a href="<c:out value="/web/user/mberSecureLogin.do"/>"><p class="title"><i class="icon_lock"></i>보안로그인</p></a>
<a href="#" id="secuLoginFlag" class="state"> </a>
<!-- <a href="#" class="state off">OFF</a> -->
</div>
</div>
<div class="login_pay">
<div class="check_money">

View File

@ -138,6 +138,7 @@ function whoisIpCountry() {
}
function actionLogin(){
console.log('actionLogin : actionLogin')
setTimeout(function() {
if (isKoreaIpAddress == false) {
@ -180,28 +181,39 @@ function actionLogin(){
//alert(data.data.moblphonNo);
console.log('===========');
console.log(data.mberCertPhoneList);
console.log(data.passFlag);
if (data.status=="success"){
//번호인증팝업 띄우기
$("#input_list_item_1").hide();
$("#input_list_item_2").hide();
$("#input_list_item_3").hide();
$("#input_list_item_0").hide();
$("#input_list_item_4").show();
$("#input_list_item_5").show();
$("#input_list_item_6").show();
// $("#hp_text2").val(data.data.moblphonNo);
var $select = $('#hp_text2');
data.mberCertPhoneList.forEach(function(item) {
$select.append($('<option>', {
value: item.mbtlnum, // option의 value 값
text: item.mbtlnum+'('+item.certAlias+')' // option의 화면에 보이는 텍스트
}));
});
if(data.passFlag == "Y")
{
document.loginForm2.passFlag.value = passFlag;
actionLogin_end();
}
else
{
//번호인증팝업 띄우기
$("#input_list_item_1").hide();
$("#input_list_item_2").hide();
$("#input_list_item_3").hide();
$("#input_list_item_0").hide();
$("#input_list_item_4").show();
$("#input_list_item_5").show();
$("#input_list_item_6").show();
// $("#hp_text2").val(data.data.moblphonNo);
var $select = $('#hp_text2');
data.mberCertPhoneList.forEach(function(item) {
$select.append($('<option>', {
value: item.mbtlnum, // option의 value 값
text: item.mbtlnum+'('+item.certAlias+')' // option의 화면에 보이는 텍스트
}));
});
}
}else if (data.status=="fail"){
if (data.dormantYn=="Y"){
@ -526,6 +538,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
<input type="hidden" name="goEventPay" value="${goEventPay}"/>
<input type="hidden" id="hp" name="hp">
<input type="hidden" id="num" name="num">
<input type="hidden" id="passFlag" name="passFlag">
<div class="send_top">
<div class="mypage_content current">

View File

@ -9,25 +9,81 @@
//보안 로그인
$(document).ready(function(){
// 허용 IP 등록
$(".btn_allow_ip_add").click(function () {
if (confirm("현재 접속중인 IP를 접속 허용 IP로 등록하시겠습니까?")) {
alert("접속 허용 IP 등록이 완료되었습니다.");
var ip = $('#cennectIp').val();
if (confirm("현재 접속중인 IP["+ip+"]를 접속 허용 IP로 등록하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/cert/ip/insertCennetCertIp.do",
data: null,
dataType:'json',
async: false,
success: function (returnData) {
if(returnData.status == 'OK'){
alert("접속 허용 IP["+ip+"] 등록이 완료되었습니다.");
location.reload();
}
else
{
alert("오류가 발생하였습니다.");
}
},
error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
});
} else {}
});
// secuLoginFlag 값에 따라 해당하는 탭에 'on' 클래스 추가
if ('${mberManageVO.secuLoginFlag}' === 'Y') {
$('.security_tab a').filter(function() {
return $(this).text() === 'ON';
}).addClass('on');
} else {
$('.security_tab a').filter(function() {
return $(this).text() === 'OFF';
}).addClass('on');
}
// on/off 시 confirm 창 노출
$('.security_set .tab_depth1 a').click(function () {
if ($(this).text().trim() == "ON") {
if(!confirm("보안로그인 설정 후 로그인 시, 등록한 휴대폰번호로 추가 인증이 진행됩니다")){
console.log('???');
return false;
$('.security_tab a').click(function (e) {
if ($(this).hasClass("on") == false) {
if ($(this).text().trim() == "ON") {
// if (!confirm("보안로그인 설정 후 로그인 시, 등록한 휴대폰번호로 추가 인증이 진행됩니다")) {
if (!confirm("보안로그인 설정 시 미리 등록한 IP로 접속하거나 휴대폰 SMS 추가 인증을 진행하셔야 합니다.")) {
$(this).removeClass("on");
$(this).siblings("a").addClass("on");
} else {
callTo();
$(this).addClass("on");
$(this).siblings("a").removeClass("on");
}
} else {
// if (!confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능하며, 보안로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임지지 않습니다.")) {
if (!confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능합니다. 해제 시 계정정보 유출에 따른 피해가 발생할 수 있으므로 이를 권장하지 않습니다.")) {
$(this).removeClass("on");
$(this).siblings("a").addClass("on");
} else {
// $(this).addClass("on");
// $(this).siblings("a").removeClass("on");
openKMCISWindow();
}
}
} else {
confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능하며, 보안로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임지지 않습니다.");
openKMCISWindow();
}
});
// 인증번호 발송 버튼
@ -220,6 +276,19 @@ $(document).ready(function(){
findAllCertIp();
findAllCertPhone();
console.log('${mberCertLoginLogVO.secuLoginFlag}');
var secuLoginFlag = '${mberCertLoginLogVO.secuLoginFlag}';
if(secuLoginFlag == 'Y'){
console.log('????????Y')
$('#secuOffBtn').click();
}else if(secuLoginFlag == 'N'){
console.log('????????N')
$('#secuOnBtn').click();
}
});
function fn_phoneSave(obj){
@ -274,6 +343,7 @@ function regCertPhone(params){
dataType:'json',
async: false,
success: function (returnData) {
console.log('returnData : ', returnData);
if(returnData.status == 'OK'){
$('.tooltip-close').click()
alert(returnData.message);
@ -440,7 +510,11 @@ function fn_PDelRow(p_mbtlnum){
//IP 삭제
function deleteRow(p_ip){
var myIp = $('#cennectIp').val();
console.log('p_ip : ', p_ip);
var params = {
"certIp" : p_ip
}
@ -455,6 +529,11 @@ function deleteRow(p_ip){
async: false,
success: function (returnData) {
if(returnData.status == 'OK'){
if(myIp == p_ip){
location.reload();
}
findAllCertIp();
}
else
@ -499,13 +578,46 @@ function openKMCISWindow(){
//자식창에서 호출
function callTo() {
alert("호출입니다.");
$.ajax({
url: '/web/user/mberSecureLoginAjax.do',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
secuLoginFlag: '${mberManageVO.secuLoginFlag}'
}),
success: function(response) {
if(response === 'success'){
alert('변경이 완료되었습니다.');
location.reload();
}else{
alert('변경에 실패했습니다. 다시 시도해 주세요.');
location.reload();
}
},
error: function(error) {
alert("error");
}
});
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.submit();
}
//휴대푠 번호 등록 [끝]--------------------------------------------------------------------------------------------
</script>
<form name="reqKMCISForm" method="post" action="#">
<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}">
</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}'/>"/>
</form>
<div class="mask"></div>
<!-- 휴대폰인증 팝업 -->
@ -538,7 +650,7 @@ function callTo() {
<th>인증번호</th>
<td>
<label for="" class="label">인증번호 입력</label>
<input type="text" placeholder="인증번호 4자리 입력" id="certNumber" onfocus="this.placeholder=''" onblur="this.placeholder='인증번호 4자리 입력'" class="inputLight" style="width: 200px;">
<input type="text" placeholder="인증번호 6자리 입력" id="certNumber" onfocus="this.placeholder=''" onblur="this.placeholder='인증번호 6자리 입력'" class="inputLight" style="width: 200px;">
<button type="button" id="certConfirmBtn" class="btnType btnType6" style="width:90px">확인</button>
</td>
</tr>
@ -581,18 +693,21 @@ function callTo() {
<div class="title_wrap">
<p class="dashboard_title">보안로그인</p>
<div class="title_box ip_add_wrap">
<span>현재 접속중인 IP : <b>000.000.000.00</b></span>
<button type="button" class="btnType btnType6 btn_allow_ip_add">허용 IP 등록</button>
<span>현재 접속중인 IP : <b><c:out value="${cennectIP }"/> <c:if test="${chkcertRegIP }"> [허용 IP] </c:if> </b></span>
<input type="hidden" id="cennectIp" value="<c:out value="${cennectIP }"/>"/>
<c:if test="${!chkcertRegIP }">
<button type="button" class="btnType btnType6 btn_allow_ip_add">허용 IP 등록</button>
</c:if>
</div>
</div>
<div class="set_area">
<p class="lately_date">최근 변경일시 : <span>2024-11-01 12:49</span></p>
<div class="tab_depth1">
<!-- <a href="#none" class="on">ON</a> -->
<a href="#none" class="on">ON</a>
<a href="#none">OFF</a>
<input type="hidden" id="secuLoginFlag" value="${secuLoginFlag}" />
<div class="tab_depth1 security_tab">
<a href="#none" id="secuOnBtn">ON</a>
<a href="#none" id="secuOffBtn">OFF</a>
</div>
</div>
</div>
@ -728,62 +843,19 @@ function callTo() {
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>PC</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>모바일</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>PC</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>모바일</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>PC</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>모바일</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>PC</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>모바일</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>PC</td>
</tr>
<tr>
<td>2024-11-20 13:57:12</td>
<td>119.193.215.98</td>
<td>모바일</td>
<td><c:out value="${result.loginDt}"/></td>
<td><c:out value="${result.loginIp}"/></td>
<td><c:out value="${result.loginDevice}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<!-- //로그인 내역 -->
<!-- pagination -->
<ul class="pagination">
<!-- <ul class="pagination">
<li class="page_first"><button><img src="/publish/images/content/page_first.png" alt=""></button></li>
<li class="page_prev"><button><img src="/publish/images/content/page_prev.png" alt=""></button></li>
<li class="on"><button>1</button></li>
@ -798,8 +870,13 @@ function callTo() {
<li><button>10</button></li>
<li class="page_next"><button><img src="/publish/images/content/page_next.png" alt=""></button></li>
<li class="page_last"><button><img src="/publish/images/content/page_last.png" alt=""></button></li>
</ul><!-- pagination -->
</ul>pagination
-->
<c:if test="${!empty resultList}">
<ul class="pagination">
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
</ul>
</c:if>
</div>
<!-- //보안로그인 -->
</div>

View File

@ -224,13 +224,14 @@
</div>
<button type="button" class="btnType btnType3">마이페이지</button>
<button type="button" class="btnType btnType2">로그아웃</button>
<div class="security_box red_box">
<a href="#" class="title">보안로그인</a><!-- 보안로그인 클릭시 보안로그인 홈페이지로 -->
<span class="state off">OFF</span><!-- ON/OFF 클릭시 이벤트 발생 -->
<a href="#" class="state off">OFF</a><!-- ON/OFF 클릭시 이벤트 발생 -->
</div>
<div class="security_box green_box">
<a href="#" class="title">보안로그인</a>
<span class="state on">ON</span>
<a href="#" class="state on">ON</a>
</div>
</div>
<div class="login_pay">