--- src/main/java/itn/let/cert/ip/service/MberCertLoginLogVO.java
+++ src/main/java/itn/let/cert/ip/service/MberCertLoginLogVO.java
... | ... | @@ -30,6 +30,8 @@ |
| 30 | 30 |
private String loginDevice; |
| 31 | 31 |
private String loginDt; |
| 32 | 32 |
|
| 33 |
+ private String secuLoginFlag; |
|
| 34 |
+ |
|
| 33 | 35 |
|
| 34 | 36 |
public String getCertLoginId() {
|
| 35 | 37 |
return certLoginId; |
... | ... | @@ -61,6 +63,12 @@ |
| 61 | 63 |
public void setLoginDt(String loginDt) {
|
| 62 | 64 |
this.loginDt = loginDt; |
| 63 | 65 |
} |
| 66 |
+ public String getSecuLoginFlag() {
|
|
| 67 |
+ return secuLoginFlag; |
|
| 68 |
+ } |
|
| 69 |
+ public void setSecuLoginFlag(String secuLoginFlag) {
|
|
| 70 |
+ this.secuLoginFlag = secuLoginFlag; |
|
| 71 |
+ } |
|
| 64 | 72 |
|
| 65 | 73 |
|
| 66 | 74 |
|
--- src/main/java/itn/let/cert/ip/service/impl/CertLoginLogServiceImpl.java
+++ src/main/java/itn/let/cert/ip/service/impl/CertLoginLogServiceImpl.java
... | ... | @@ -51,18 +51,18 @@ |
| 51 | 51 |
public void insertCertLoginLog(MberCertLoginLogVO mberCertLoginLogVO, HttpServletRequest request) throws FdlException {
|
| 52 | 52 |
|
| 53 | 53 |
|
| 54 |
- int count = certLoginLogDAO.checkLoginIpExists(mberCertLoginLogVO); |
|
| 55 |
- |
|
| 56 |
- if (count > 0) {
|
|
| 57 |
- // 이미 존재하면 UPDATE |
|
| 58 |
- certLoginLogDAO.updateCertLoginLog(mberCertLoginLogVO); |
|
| 59 |
- } else {
|
|
| 54 |
+// int count = certLoginLogDAO.checkLoginIpExists(mberCertLoginLogVO); |
|
| 55 |
+// |
|
| 56 |
+// if (count > 0) {
|
|
| 57 |
+// // 이미 존재하면 UPDATE |
|
| 58 |
+// certLoginLogDAO.updateCertLoginLog(mberCertLoginLogVO); |
|
| 59 |
+// } else {
|
|
| 60 | 60 |
|
| 61 | 61 |
mberCertLoginLogVO.setCertLoginId(certLoginLogIdGnrService.getNextStringId()); |
| 62 | 62 |
mberCertLoginLogVO.setLoginDevice(getDevice(request)); |
| 63 | 63 |
certLoginLogDAO.insertCertLoginLog(mberCertLoginLogVO); |
| 64 | 64 |
|
| 65 |
- } |
|
| 65 |
+// } |
|
| 66 | 66 |
} |
| 67 | 67 |
|
| 68 | 68 |
private String getDevice(HttpServletRequest request) {
|
--- src/main/java/itn/let/cert/phone/web/CertPhoneController.java
+++ src/main/java/itn/let/cert/phone/web/CertPhoneController.java
... | ... | @@ -122,7 +122,9 @@ |
| 122 | 122 |
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); |
| 123 | 123 |
} |
| 124 | 124 |
mberCertPhoneVO.setFrstRegisterId(userId); |
| 125 |
- mberCertPhoneVO.setMberId(userId); |
|
| 125 |
+ if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
|
|
| 126 |
+ mberCertPhoneVO.setMberId(userId); |
|
| 127 |
+ } |
|
| 126 | 128 |
|
| 127 | 129 |
|
| 128 | 130 |
return ResponseEntity.ok().body(certPhoneService.updateMberCertPhone(mberCertPhoneVO)); |
... | ... | @@ -142,8 +144,10 @@ |
| 142 | 144 |
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); |
| 143 | 145 |
} |
| 144 | 146 |
mberCertPhoneVO.setLastUpdusrId(userId); |
| 145 |
- mberCertPhoneVO.setMberId(userId); |
|
| 146 |
- |
|
| 147 |
+ |
|
| 148 |
+ if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
|
|
| 149 |
+ mberCertPhoneVO.setMberId(userId); |
|
| 150 |
+ } |
|
| 147 | 151 |
|
| 148 | 152 |
|
| 149 | 153 |
return ResponseEntity.ok().body(certPhoneService.deleteCertPhone(mberCertPhoneVO)); |
--- src/main/java/itn/let/uat/uia/web/EgovMypageController.java
+++ src/main/java/itn/let/uat/uia/web/EgovMypageController.java
... | ... | @@ -2951,6 +2951,10 @@ |
| 2951 | 2951 |
return "redirect:/web/user/login/login.do"; |
| 2952 | 2952 |
} |
| 2953 | 2953 |
|
| 2954 |
+ // secuLoginFlag 값을 Model에 추가 |
|
| 2955 |
+ model.addAttribute("secuLoginFlag", mberCertLoginLogVO.getSecuLoginFlag());
|
|
| 2956 |
+ System.out.println(mberCertLoginLogVO.getSecuLoginFlag()); |
|
| 2957 |
+ |
|
| 2954 | 2958 |
//로그인 권한정보 불러오기 |
| 2955 | 2959 |
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
| 2956 | 2960 |
|
... | ... | @@ -3022,7 +3026,10 @@ |
| 3022 | 3026 |
|
| 3023 | 3027 |
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
|
| 3024 | 3028 |
|
| 3025 |
- model.addAttribute("pageTab", "mberSecureLogin");
|
|
| 3029 |
+ model.addAttribute("pageTab", "mberSecureLogin");
|
|
| 3030 |
+ |
|
| 3031 |
+ |
|
| 3032 |
+ |
|
| 3026 | 3033 |
return "web/user/mberSecureLogin"; |
| 3027 | 3034 |
} |
| 3028 | 3035 |
|
--- src/main/resources/egovframework/sqlmap/let/cert/MjonCertLoginLog_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/cert/MjonCertLoginLog_SQL_mysql.xml
... | ... | @@ -18,8 +18,12 @@ |
| 18 | 18 |
COUNT(CERT_LOGIN_ID) OVER() AS totCnt |
| 19 | 19 |
, CERT_LOGIN_ID as certLoginId |
| 20 | 20 |
, LOGIN_ID as loginId |
| 21 |
- , LOGIN_IP as loginIp |
|
| 22 |
- , LOGIN_DEVICE as loginDevice |
|
| 21 |
+ , LOGIN_IP as loginIp |
|
| 22 |
+ , CASE |
|
| 23 |
+ WHEN LOGIN_DEVICE = 'D' THEN 'PC' |
|
| 24 |
+ WHEN LOGIN_DEVICE IN ('M', 'T') THEN '모바일'
|
|
| 25 |
+ ELSE 'PC' |
|
| 26 |
+ END AS loginDevice |
|
| 23 | 27 |
, DATE_FORMAT(LOGIN_DT,'%Y-%m-%d %T') as loginDt |
| 24 | 28 |
FROM LETTNGNRLMBER_CERT_LOGIN_LOG_IP |
| 25 | 29 |
WHERE 1=1 |
--- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
... | ... | @@ -41,6 +41,42 @@ |
| 41 | 41 |
<script> |
| 42 | 42 |
$(document).ready(function (){
|
| 43 | 43 |
|
| 44 |
+ |
|
| 45 |
+ $(document).on('click', '#secuLoginFlag', function () {
|
|
| 46 |
+ |
|
| 47 |
+ var secuLoginFlag = ""; |
|
| 48 |
+ console.log($(this).text()); |
|
| 49 |
+ if($(this).text() == 'ON'){
|
|
| 50 |
+ secuLoginFlag = 'Y' |
|
| 51 |
+ } |
|
| 52 |
+ else{
|
|
| 53 |
+ secuLoginFlag = 'N' |
|
| 54 |
+ } |
|
| 55 |
+ |
|
| 56 |
+ |
|
| 57 |
+ // 디버깅용 출력 |
|
| 58 |
+ console.log(secuLoginFlag); |
|
| 59 |
+ |
|
| 60 |
+ // 동적으로 form 생성 |
|
| 61 |
+ var form = $('<form>', {
|
|
| 62 |
+ action: '/web/user/mberSecureLogin.do', // 전송할 URL |
|
| 63 |
+ method: 'POST' // POST 방식 설정 |
|
| 64 |
+ }); |
|
| 65 |
+ |
|
| 66 |
+ // form에 hidden input 추가 |
|
| 67 |
+ form.append($('<input>', {
|
|
| 68 |
+ type: 'hidden', |
|
| 69 |
+ name: 'secuLoginFlag', // 서버에서 받을 파라미터 이름 |
|
| 70 |
+ value: secuLoginFlag // 전달할 값 |
|
| 71 |
+ })); |
|
| 72 |
+ |
|
| 73 |
+ // form을 body에 추가 후 제출 |
|
| 74 |
+ $('body').append(form);
|
|
| 75 |
+ form.submit(); |
|
| 76 |
+ |
|
| 77 |
+ |
|
| 78 |
+ }); |
|
| 79 |
+ |
|
| 44 | 80 |
//세션에서 종료시간을 받아와서 타이머 실행함 |
| 45 | 81 |
/* var timer = '${timer}';
|
| 46 | 82 |
if(timer != ""){
|
... | ... | @@ -824,6 +860,8 @@ |
| 824 | 860 |
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'); |
| 825 | 861 |
} |
| 826 | 862 |
</script> |
| 863 |
+ |
|
| 864 |
+ |
|
| 827 | 865 |
<div class="mask"></div> |
| 828 | 866 |
<c:if test="${inspYn == 'Y'}">
|
| 829 | 867 |
<style> |
--- src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
... | ... | @@ -9,10 +9,13 @@ |
| 9 | 9 |
|
| 10 | 10 |
//보안 로그인 |
| 11 | 11 |
$(document).ready(function(){
|
| 12 |
- |
|
| 12 |
+ |
|
| 13 | 13 |
// 허용 IP 등록 |
| 14 | 14 |
$(".btn_allow_ip_add").click(function () {
|
| 15 |
- if (confirm("현재 접속중인 IP를 접속 허용 IP로 등록하시겠습니까?")) {
|
|
| 15 |
+ |
|
| 16 |
+ var ip = $('#cennectIp').val();
|
|
| 17 |
+ |
|
| 18 |
+ if (confirm("현재 접속중인 IP["+ip+"]를 접속 허용 IP로 등록하시겠습니까?")) {
|
|
| 16 | 19 |
|
| 17 | 20 |
$.ajax({
|
| 18 | 21 |
type: "POST", |
... | ... | @@ -21,8 +24,9 @@ |
| 21 | 24 |
dataType:'json', |
| 22 | 25 |
async: false, |
| 23 | 26 |
success: function (returnData) {
|
| 27 |
+ |
|
| 24 | 28 |
if(returnData.status == 'OK'){
|
| 25 |
- alert("접속 허용 IP 등록이 완료되었습니다.");
|
|
| 29 |
+ alert("접속 허용 IP["+ip+"] 등록이 완료되었습니다.");
|
|
| 26 | 30 |
location.reload(); |
| 27 | 31 |
} |
| 28 | 32 |
else |
... | ... | @@ -61,7 +65,8 @@ |
| 61 | 65 |
$(this).siblings("a").removeClass("on");
|
| 62 | 66 |
} |
| 63 | 67 |
} else {
|
| 64 |
- if (!confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능하며, 보안로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임지지 않습니다.")) {
|
|
| 68 |
+// if (!confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능하며, 보안로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임지지 않습니다.")) {
|
|
| 69 |
+ if (!confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능합니다. 해제 시 계정정보 유출에 따른 피해가 발생할 수 있으므로 이를 권장하지 않습니다.")) {
|
|
| 65 | 70 |
$(this).removeClass("on");
|
| 66 | 71 |
$(this).siblings("a").addClass("on");
|
| 67 | 72 |
} else {
|
... | ... | @@ -270,6 +275,19 @@ |
| 270 | 275 |
|
| 271 | 276 |
findAllCertIp(); |
| 272 | 277 |
findAllCertPhone(); |
| 278 |
+ |
|
| 279 |
+ |
|
| 280 |
+ console.log('${mberCertLoginLogVO.secuLoginFlag}');
|
|
| 281 |
+ var secuLoginFlag = '${mberCertLoginLogVO.secuLoginFlag}';
|
|
| 282 |
+ if(secuLoginFlag == 'Y'){
|
|
| 283 |
+ console.log('????????Y')
|
|
| 284 |
+ $('#secuOffBtn').click();
|
|
| 285 |
+ }else{
|
|
| 286 |
+ console.log('????????N')
|
|
| 287 |
+ $('#secuOnBtn').click();
|
|
| 288 |
+ |
|
| 289 |
+ } |
|
| 290 |
+ |
|
| 273 | 291 |
}); |
| 274 | 292 |
|
| 275 | 293 |
function fn_phoneSave(obj){
|
... | ... | @@ -491,7 +509,11 @@ |
| 491 | 509 |
//IP 삭제 |
| 492 | 510 |
function deleteRow(p_ip){
|
| 493 | 511 |
|
| 512 |
+ |
|
| 513 |
+ var myIp = $('#cennectIp').val();
|
|
| 494 | 514 |
console.log('p_ip : ', p_ip);
|
| 515 |
+ |
|
| 516 |
+ |
|
| 495 | 517 |
var params = {
|
| 496 | 518 |
"certIp" : p_ip |
| 497 | 519 |
} |
... | ... | @@ -506,6 +528,11 @@ |
| 506 | 528 |
async: false, |
| 507 | 529 |
success: function (returnData) {
|
| 508 | 530 |
if(returnData.status == 'OK'){
|
| 531 |
+ if(myIp == p_ip){
|
|
| 532 |
+ location.reload(); |
|
| 533 |
+ |
|
| 534 |
+ } |
|
| 535 |
+ |
|
| 509 | 536 |
findAllCertIp(); |
| 510 | 537 |
} |
| 511 | 538 |
else |
... | ... | @@ -622,7 +649,7 @@ |
| 622 | 649 |
<th>인증번호</th> |
| 623 | 650 |
<td> |
| 624 | 651 |
<label for="" class="label">인증번호 입력</label> |
| 625 |
- <input type="text" placeholder="인증번호 4자리 입력" id="certNumber" onfocus="this.placeholder=''" onblur="this.placeholder='인증번호 4자리 입력'" class="inputLight" style="width: 200px;"> |
|
| 652 |
+ <input type="text" placeholder="인증번호 6자리 입력" id="certNumber" onfocus="this.placeholder=''" onblur="this.placeholder='인증번호 4자리 입력'" class="inputLight" style="width: 200px;"> |
|
| 626 | 653 |
<button type="button" id="certConfirmBtn" class="btnType btnType6" style="width:90px">확인</button> |
| 627 | 654 |
</td> |
| 628 | 655 |
</tr> |
... | ... | @@ -666,6 +693,7 @@ |
| 666 | 693 |
<p class="dashboard_title">보안로그인</p> |
| 667 | 694 |
<div class="title_box ip_add_wrap"> |
| 668 | 695 |
<span>현재 접속중인 IP : <b><c:out value="${cennectIP }"/> <c:if test="${chkcertRegIP }"> [허용 IP] </c:if> </b></span>
|
| 696 |
+ <input type="hidden" id="cennectIp" value="<c:out value="${cennectIP }"/>"/>
|
|
| 669 | 697 |
<c:if test="${!chkcertRegIP }">
|
| 670 | 698 |
<button type="button" class="btnType btnType6 btn_allow_ip_add">허용 IP 등록</button> |
| 671 | 699 |
</c:if> |
... | ... | @@ -675,9 +703,10 @@ |
| 675 | 703 |
<div class="set_area"> |
| 676 | 704 |
<p class="lately_date">최근 변경일시 : <span>2024-11-01 12:49</span></p> |
| 677 | 705 |
|
| 706 |
+ <input type="hidden" id="secuLoginFlag" value="${secuLoginFlag}" />
|
|
| 678 | 707 |
<div class="tab_depth1 security_tab"> |
| 679 |
- <a href="#none">ON</a> |
|
| 680 |
- <a href="#none">OFF</a> |
|
| 708 |
+ <a href="#none" id="secuOnBtn">ON</a> |
|
| 709 |
+ <a href="#none" id="secuOffBtn">OFF</a> |
|
| 681 | 710 |
</div> |
| 682 | 711 |
</div> |
| 683 | 712 |
</div> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?