diff --git a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java
index 2fa0f583..6277da30 100644
--- a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java
+++ b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java
@@ -2942,6 +2942,23 @@ public class EgovMypageController {
return "web/user/mberSecession";
}
+ /**
+ * 회원탈퇴 본인인증 화면
+ */
+ @RequestMapping(value="/web/user/mberSecureLogin.do")
+ public String secureLogin(@ModelAttribute MberManageVO mberManageVO
+ , ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
+
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+ if(loginVO == null) {
+ //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
+ return "redirect:/web/user/login/login.do";
+ }
+
+ model.addAttribute("pageTab", "mberSecureLogin");
+ return "web/user/mberSecureLogin";
+ }
+
/**
* 회원탈퇴 상세정보 화면
*/
diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
index 11a59870..78b4db94 100644
--- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
@@ -56,323 +56,6 @@ $(document).ready(function(){
});
-// 보안 로그인
-$(document).ready(function(){
-
- // 인증번호 발송 버튼
- $('#certReqBtn').on('click', function(){
- var certReqPhone = $('#certReqPhone').val();
-
- if (certReqPhone==''){
- alert("핸드폰번호를 입력해주세요.");
- return;
- }
- var params = {"mbtlnum" : certReqPhone }
- $.ajax({
- type: "POST",
- url : "",
- data: params,
- dataType:'json',
- async: false,
- success: function (returnData) {
- console.log('returnData : ', returnData);
- if(returnData.status == 'OK'){
- alert(returnData.object.msg);
- $("#certReqPhone").prop("disabled", true);
- }
- else
- {
- alert("오류가 발생하였습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
- });
-
- // 인증 버튼
- $('#certConfirmBtn').on('click', function(){
- var certReqPhone = $('#certReqPhone').val();
- var certNumber = $('#certNumber').val();
-
- if (certNumber==''){
- alert("인증번호를 입력해주세요.");
- return;
- }
- var params = {"mbtlnum" : certReqPhone, "checkNo" : certNumber }
- $.ajax({
- type: "POST",
- url : "",
- data: params,
- dataType:'json',
- async: false,
- success: function (returnData) {
- console.log('returnData : ', returnData);
- if(returnData.status == 'OK'){
-// alert(returnData.object.msg);
- regCertPhone(params);
- }
- else if(returnData.status == 'BAD_REQUEST'){
- alert(returnData.message);
- }
- else
- {
- alert("오류가 발생하였습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
- });
-
-
-
- $('#showLoginBtn').on('click', function() {
- if ($('#securityLogin').is(':visible')) {
- $('#securityLogin').hide();
- } else {
- $('#securityLogin').show();
- }
- });
-
-
-
- // IP 추가 버튼 클릭 시 tr 추가
- $(".btn_ip_plus").click(function () {
- // 추가할 HTML 구조
- const ipTr = `
-
- |
- |
- - |
-
-
- |
-
- `;
-
- // 이미 추가된 `.ip-row`가 있는지 확인
- if ($(".ip_table tbody .ip-new").length === 0) {
- $(".ip_table tbody").prepend(ipTr); // 중복되지 않으면 추가
- } else {
- alert("이미 추가된 항목이 있습니다.");
- }
- });
-
-
- // IP 등록버튼
- $(document).on('click', '#ipRegBtn', function () {
- // 현재 클릭된 버튼의 부모 tr 요소
- const $currentRow = $(this).closest('tr');
-
- // 입력값 가져오기
- const ipValue = $currentRow.find('td:eq(0) input').val(); // 첫 번째 열 (IP)
- const memoValue = $currentRow.find('td:eq(1) input').val(); // 두 번째 열 (메모)
-
- // 예외 처리
- if (!ipValue) {
- alert("등록할 IP를 입력해주세요.");
- $currentRow.find('td:eq(0) input').focus();
- return;
- }
-
-
- const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
-
- if (!ipRegex.test(ipValue)) {
- alert("유효하지 않은 IP 주소입니다.");
- return false;
- }
-
- var params = {
- "certIp" : ipValue
- , "certMemo" : memoValue
- }
-
- if(!confirm("IP를 등록 하시겠습니까?")){
- return false;
- }
- $.ajax({
- type: "POST",
- url: "/cert/ip/insertCertIp.do",
- data: params,
- dataType:'json',
- async: false,
- success: function (returnData) {
- if(returnData.status == 'OK'){
- findAllCertIp();
- }else if(returnData.status == 'CONFLICT'){
- alert(returnData.message);
- return false;
- }
- else
- {
- alert("오류가 발생하였습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
- });
-
-
- findAllCertIp();
-});
-
-
-function regCertPhone(params){
-
- $.ajax({
- type: "POST",
- url: "/cert/phone/insertCertPhone.do",
- data: params,
- dataType:'json',
- async: false,
- success: function (returnData) {
- if(returnData.status == 'OK'){
- findAllCertIp();
- }else if(returnData.status == 'CONFLICT'){
- alert(returnData.message);
- return false;
- }
- else
- {
- alert("오류가 발생하였습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
-
-
-}
-
-function findAllCertIp(){
-
- $.ajax({
- type: "POST",
- url: "/cert/ip/selectMberCertIpList.do",
- data: null,
- dataType:'json',
- async: false,
- success: function (returnData) {
- if (returnData.status === "OK") {
- const objects = returnData.object; // 배열 데이터
-
- // tbody의 기존 내용 삭제
- const $tbody = $(".ip_table tbody");
- $tbody.empty();
-
- // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가
- $.each(objects, function(index, obj) {
- const $tr = $("
"); // tr 요소 생성
-
- // 각 td 요소 생성
- const $certIp = $(" | ").text(obj.certIp || "");
- const $certMemo = $(" | ").text(obj.certMemo || "");
- const $frstRegistPnttm = $(" | ").text(obj.frstRegistPnttm || "등록되지 않음");
- const $deleteBtn = $("")
- .addClass("btnType btn_text btn_lightgray fill btn_28")
- .text("삭제")
- .attr("type", "button")
- .attr("id", "ipDelBtn")
- .on("click", function() {
- deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행
- });
-
- // 관리 버튼을 감쌀 td 생성
- const $deleteTd = $(" | ").append($deleteBtn);
-
- // tr에 td 추가
- $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd);
-
- // tbody에 tr 추가
- $tbody.append($tr);
- });
- } else {
- alert("데이터를 불러오는 데 실패했습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
-}
-
-function findAllCertPhone(){
-
- $.ajax({
- type: "POST",
- url: "/cert/ip/selectMberCertIpList.do",
- data: null,
- dataType:'json',
- async: false,
- success: function (returnData) {
- if (returnData.status === "OK") {
- const objects = returnData.object; // 배열 데이터
-
- // tbody의 기존 내용 삭제
- const $tbody = $(".ip_table tbody");
- $tbody.empty();
-
- // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가
- $.each(objects, function(index, obj) {
- const $tr = $("
"); // tr 요소 생성
-
- // 각 td 요소 생성
- const $certIp = $(" | ").text(obj.certIp || "");
- const $certMemo = $(" | ").text(obj.certMemo || "");
- const $frstRegistPnttm = $(" | ").text(obj.frstRegistPnttm || "등록되지 않음");
- const $deleteBtn = $("")
- .addClass("btnType btn_text btn_lightgray fill btn_28")
- .text("삭제")
- .attr("type", "button")
- .attr("id", "ipDelBtn")
- .on("click", function() {
- deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행
- });
-
- // 관리 버튼을 감쌀 td 생성
- const $deleteTd = $(" | ").append($deleteBtn);
-
- // tr에 td 추가
- $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd);
-
- // tbody에 tr 추가
- $tbody.append($tr);
- });
- } else {
- alert("데이터를 불러오는 데 실패했습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
-}
-
-// IP 삭제
-function deleteRow(p_ip){
-
- var params = {
- "certIp" : p_ip
- }
- if(!confirm("IP를 삭제 하시겠습니까?")){
- return false;
- }
- $.ajax({
- type: "POST",
- url: "/cert/ip/deleteCertIp.do",
- data: params,
- dataType:'json',
- async: false,
- success: function (returnData) {
- if(returnData.status == 'OK'){
- findAllCertIp();
- }
- else
- {
- alert("오류가 발생하였습니다.");
- }
- },
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
- });
-}
-
-
//기간 요일 지정
function setCalVal(val,targetObj){
$('input[name='+targetObj+']').val(val) ;
diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
new file mode 100644
index 00000000..5ad88a44
--- /dev/null
+++ b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
@@ -0,0 +1,645 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%@include file="/WEB-INF/jsp/web/user/mypageHeader.jsp"%>
+
+
+
+
+
보안로그인
+
+
+
+
+
+
+
+ - · 사이트 부정로그인으로 인한 피해를 방지할 수 있는 2차 로그인 인증 서비스입니다.
+ - · 인증 휴대폰번호 추가 등록 또는 IP 접속 허용을 통해 편리한 사용이 가능합니다.
+ - · 보안로그인 기능을 사용할 경우 로그인 시 등록한 휴대폰번호로 추가 인증이 진행됩니다.
+
+
+
+
+
+
+
보안로그인
+
+ 현재 접속중인 IP : 000.000.000.00
+
+
+
+
+
+
최근 변경일시 : 2024-11-01 12:49
+
+
+
+
+
+
+
+
+
+
보안로그인
+
+ 현재 접속중인 IP : 000.000.000.00 [허용 IP]
+
+
+
+
+
최근 변경일시 : 2024-11-01 12:49
+
+
+
+
+
+
+
+
+
인증 휴대폰번호 관리
+
?
+
+
인증에 사용할 휴대폰번호를 추가로 등록하여 관리할 수 있습니다.
+ (등록 및 삭제 시 휴대폰 본인인증 필요)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 휴대폰번호 |
+ 별칭 |
+ 메모 |
+ 등록일시 |
+ 관리 |
+
+
+
+
+ | 등록된 IP 주소가 없습니다. |
+
+
+
+
+
+
+
+
+
+
접속 IP 관리
+
?
+
+
접속 IP를 미리 등록할 경우 2차 로그인 인증 없이 접속이 가능합니다.
+ (공용 PC는 보안상의 이유로 등록을 권장하지 않습니다.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 허용IP |
+ 메모 |
+ 등록일시 |
+ 관리 |
+
+
+
+
+ | 등록된 IP 주소가 없습니다. |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
로그인 내역 로그인 내역은 최대 90일까지만 보관됩니다.
+
+
+
+
+
+
+
+
+
+
+
+ | 로그인 일시 |
+ 로그인 IP |
+ 로그인 환경 |
+
+
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ PC |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ 모바일 |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ PC |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ 모바일 |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ PC |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ 모바일 |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ PC |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ 모바일 |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ PC |
+
+
+ | 2024-11-20 13:57:12 |
+ 119.193.215.98 |
+ 모바일 |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
index 9bd85797..fa8237bf 100644
--- a/src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
@@ -36,8 +36,9 @@ $(document).ready(function(){
-
-
+
+
+
\ No newline at end of file