--- src/main/java/itn/let/uat/uia/web/EgovMypageController.java
+++ src/main/java/itn/let/uat/uia/web/EgovMypageController.java
... | ... | @@ -2943,6 +2943,23 @@ |
| 2943 | 2943 |
} |
| 2944 | 2944 |
|
| 2945 | 2945 |
/** |
| 2946 |
+ * 회원탈퇴 본인인증 화면 |
|
| 2947 |
+ */ |
|
| 2948 |
+ @RequestMapping(value="/web/user/mberSecureLogin.do") |
|
| 2949 |
+ public String secureLogin(@ModelAttribute MberManageVO mberManageVO |
|
| 2950 |
+ , ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
|
|
| 2951 |
+ |
|
| 2952 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 2953 |
+ if(loginVO == null) {
|
|
| 2954 |
+ //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
|
|
| 2955 |
+ return "redirect:/web/user/login/login.do"; |
|
| 2956 |
+ } |
|
| 2957 |
+ |
|
| 2958 |
+ model.addAttribute("pageTab", "mberSecureLogin");
|
|
| 2959 |
+ return "web/user/mberSecureLogin"; |
|
| 2960 |
+ } |
|
| 2961 |
+ |
|
| 2962 |
+ /** |
|
| 2946 | 2963 |
* 회원탈퇴 상세정보 화면 |
| 2947 | 2964 |
*/ |
| 2948 | 2965 |
@RequestMapping(value="/web/user/mberSecessionInfo.do") |
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
... | ... | @@ -56,323 +56,6 @@ |
| 56 | 56 |
}); |
| 57 | 57 |
|
| 58 | 58 |
|
| 59 |
-// 보안 로그인 |
|
| 60 |
-$(document).ready(function(){
|
|
| 61 |
- |
|
| 62 |
- // 인증번호 발송 버튼 |
|
| 63 |
- $('#certReqBtn').on('click', function(){
|
|
| 64 |
- var certReqPhone = $('#certReqPhone').val();
|
|
| 65 |
- |
|
| 66 |
- if (certReqPhone==''){
|
|
| 67 |
- alert("핸드폰번호를 입력해주세요.");
|
|
| 68 |
- return; |
|
| 69 |
- } |
|
| 70 |
- var params = {"mbtlnum" : certReqPhone }
|
|
| 71 |
- $.ajax({
|
|
| 72 |
- type: "POST", |
|
| 73 |
- url : "<c:url value='/cert/phone/sendSysMsgDataAjax.do' />", |
|
| 74 |
- data: params, |
|
| 75 |
- dataType:'json', |
|
| 76 |
- async: false, |
|
| 77 |
- success: function (returnData) {
|
|
| 78 |
- console.log('returnData : ', returnData);
|
|
| 79 |
- if(returnData.status == 'OK'){
|
|
| 80 |
- alert(returnData.object.msg); |
|
| 81 |
- $("#certReqPhone").prop("disabled", true);
|
|
| 82 |
- } |
|
| 83 |
- else |
|
| 84 |
- {
|
|
| 85 |
- alert("오류가 발생하였습니다.");
|
|
| 86 |
- } |
|
| 87 |
- }, |
|
| 88 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 89 |
- }); |
|
| 90 |
- }); |
|
| 91 |
- |
|
| 92 |
- // 인증 버튼 |
|
| 93 |
- $('#certConfirmBtn').on('click', function(){
|
|
| 94 |
- var certReqPhone = $('#certReqPhone').val();
|
|
| 95 |
- var certNumber = $('#certNumber').val();
|
|
| 96 |
- |
|
| 97 |
- if (certNumber==''){
|
|
| 98 |
- alert("인증번호를 입력해주세요.");
|
|
| 99 |
- return; |
|
| 100 |
- } |
|
| 101 |
- var params = {"mbtlnum" : certReqPhone, "checkNo" : certNumber }
|
|
| 102 |
- $.ajax({
|
|
| 103 |
- type: "POST", |
|
| 104 |
- url : "<c:url value='/cert/phone/selectSysMsgLogCheck.do' />", |
|
| 105 |
- data: params, |
|
| 106 |
- dataType:'json', |
|
| 107 |
- async: false, |
|
| 108 |
- success: function (returnData) {
|
|
| 109 |
- console.log('returnData : ', returnData);
|
|
| 110 |
- if(returnData.status == 'OK'){
|
|
| 111 |
-// alert(returnData.object.msg); |
|
| 112 |
- regCertPhone(params); |
|
| 113 |
- } |
|
| 114 |
- else if(returnData.status == 'BAD_REQUEST'){
|
|
| 115 |
- alert(returnData.message); |
|
| 116 |
- } |
|
| 117 |
- else |
|
| 118 |
- {
|
|
| 119 |
- alert("오류가 발생하였습니다.");
|
|
| 120 |
- } |
|
| 121 |
- }, |
|
| 122 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 123 |
- }); |
|
| 124 |
- }); |
|
| 125 |
- |
|
| 126 |
- |
|
| 127 |
- |
|
| 128 |
- $('#showLoginBtn').on('click', function() {
|
|
| 129 |
- if ($('#securityLogin').is(':visible')) {
|
|
| 130 |
- $('#securityLogin').hide();
|
|
| 131 |
- } else {
|
|
| 132 |
- $('#securityLogin').show();
|
|
| 133 |
- } |
|
| 134 |
- }); |
|
| 135 |
- |
|
| 136 |
- |
|
| 137 |
- |
|
| 138 |
- // IP 추가 버튼 클릭 시 tr 추가 |
|
| 139 |
- $(".btn_ip_plus").click(function () {
|
|
| 140 |
- // 추가할 HTML 구조 |
|
| 141 |
- const ipTr = ` |
|
| 142 |
- <tr class="ip-new"> |
|
| 143 |
- <td><input type="text" class="input_text" |
|
| 144 |
- oninput="this.value = this.value.replace(/[^0-9.]/g, '');" maxlength="15"/></td> |
|
| 145 |
- <td><input type="text" class="input_text"></td> |
|
| 146 |
- <td>-</td> |
|
| 147 |
- <td> |
|
| 148 |
- <button type="button" class="btnType btnType5" id="ipRegBtn">등록</button> |
|
| 149 |
- </td> |
|
| 150 |
- </tr> |
|
| 151 |
- `; |
|
| 152 |
- |
|
| 153 |
- // 이미 추가된 `.ip-row`가 있는지 확인 |
|
| 154 |
- if ($(".ip_table tbody .ip-new").length === 0) {
|
|
| 155 |
- $(".ip_table tbody").prepend(ipTr); // 중복되지 않으면 추가
|
|
| 156 |
- } else {
|
|
| 157 |
- alert("이미 추가된 항목이 있습니다.");
|
|
| 158 |
- } |
|
| 159 |
- }); |
|
| 160 |
- |
|
| 161 |
- |
|
| 162 |
- // IP 등록버튼 |
|
| 163 |
- $(document).on('click', '#ipRegBtn', function () {
|
|
| 164 |
- // 현재 클릭된 버튼의 부모 tr 요소 |
|
| 165 |
- const $currentRow = $(this).closest('tr');
|
|
| 166 |
- |
|
| 167 |
- // 입력값 가져오기 |
|
| 168 |
- const ipValue = $currentRow.find('td:eq(0) input').val(); // 첫 번째 열 (IP)
|
|
| 169 |
- const memoValue = $currentRow.find('td:eq(1) input').val(); // 두 번째 열 (메모)
|
|
| 170 |
- |
|
| 171 |
- // 예외 처리 |
|
| 172 |
- if (!ipValue) {
|
|
| 173 |
- alert("등록할 IP를 입력해주세요.");
|
|
| 174 |
- $currentRow.find('td:eq(0) input').focus();
|
|
| 175 |
- return; |
|
| 176 |
- } |
|
| 177 |
- |
|
| 178 |
- |
|
| 179 |
- 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]?)$/; |
|
| 180 |
- |
|
| 181 |
- if (!ipRegex.test(ipValue)) {
|
|
| 182 |
- alert("유효하지 않은 IP 주소입니다.");
|
|
| 183 |
- return false; |
|
| 184 |
- } |
|
| 185 |
- |
|
| 186 |
- var params = {
|
|
| 187 |
- "certIp" : ipValue |
|
| 188 |
- , "certMemo" : memoValue |
|
| 189 |
- } |
|
| 190 |
- |
|
| 191 |
- if(!confirm("IP를 등록 하시겠습니까?")){
|
|
| 192 |
- return false; |
|
| 193 |
- } |
|
| 194 |
- $.ajax({
|
|
| 195 |
- type: "POST", |
|
| 196 |
- url: "/cert/ip/insertCertIp.do", |
|
| 197 |
- data: params, |
|
| 198 |
- dataType:'json', |
|
| 199 |
- async: false, |
|
| 200 |
- success: function (returnData) {
|
|
| 201 |
- if(returnData.status == 'OK'){
|
|
| 202 |
- findAllCertIp(); |
|
| 203 |
- }else if(returnData.status == 'CONFLICT'){
|
|
| 204 |
- alert(returnData.message); |
|
| 205 |
- return false; |
|
| 206 |
- } |
|
| 207 |
- else |
|
| 208 |
- {
|
|
| 209 |
- alert("오류가 발생하였습니다.");
|
|
| 210 |
- } |
|
| 211 |
- }, |
|
| 212 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 213 |
- }); |
|
| 214 |
- }); |
|
| 215 |
- |
|
| 216 |
- |
|
| 217 |
- findAllCertIp(); |
|
| 218 |
-}); |
|
| 219 |
- |
|
| 220 |
- |
|
| 221 |
-function regCertPhone(params){
|
|
| 222 |
- |
|
| 223 |
- $.ajax({
|
|
| 224 |
- type: "POST", |
|
| 225 |
- url: "/cert/phone/insertCertPhone.do", |
|
| 226 |
- data: params, |
|
| 227 |
- dataType:'json', |
|
| 228 |
- async: false, |
|
| 229 |
- success: function (returnData) {
|
|
| 230 |
- if(returnData.status == 'OK'){
|
|
| 231 |
- findAllCertIp(); |
|
| 232 |
- }else if(returnData.status == 'CONFLICT'){
|
|
| 233 |
- alert(returnData.message); |
|
| 234 |
- return false; |
|
| 235 |
- } |
|
| 236 |
- else |
|
| 237 |
- {
|
|
| 238 |
- alert("오류가 발생하였습니다.");
|
|
| 239 |
- } |
|
| 240 |
- }, |
|
| 241 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 242 |
- }); |
|
| 243 |
- |
|
| 244 |
- |
|
| 245 |
-} |
|
| 246 |
- |
|
| 247 |
-function findAllCertIp(){
|
|
| 248 |
- |
|
| 249 |
- $.ajax({
|
|
| 250 |
- type: "POST", |
|
| 251 |
- url: "/cert/ip/selectMberCertIpList.do", |
|
| 252 |
- data: null, |
|
| 253 |
- dataType:'json', |
|
| 254 |
- async: false, |
|
| 255 |
- success: function (returnData) {
|
|
| 256 |
- if (returnData.status === "OK") {
|
|
| 257 |
- const objects = returnData.object; // 배열 데이터 |
|
| 258 |
- |
|
| 259 |
- // tbody의 기존 내용 삭제 |
|
| 260 |
- const $tbody = $(".ip_table tbody");
|
|
| 261 |
- $tbody.empty(); |
|
| 262 |
- |
|
| 263 |
- // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가 |
|
| 264 |
- $.each(objects, function(index, obj) {
|
|
| 265 |
- const $tr = $("<tr></tr>"); // tr 요소 생성
|
|
| 266 |
- |
|
| 267 |
- // 각 td 요소 생성 |
|
| 268 |
- const $certIp = $("<td></td>").text(obj.certIp || "");
|
|
| 269 |
- const $certMemo = $("<td></td>").text(obj.certMemo || "");
|
|
| 270 |
- const $frstRegistPnttm = $("<td></td>").text(obj.frstRegistPnttm || "등록되지 않음");
|
|
| 271 |
- const $deleteBtn = $("<button></button>")
|
|
| 272 |
- .addClass("btnType btn_text btn_lightgray fill btn_28")
|
|
| 273 |
- .text("삭제")
|
|
| 274 |
- .attr("type", "button")
|
|
| 275 |
- .attr("id", "ipDelBtn")
|
|
| 276 |
- .on("click", function() {
|
|
| 277 |
- deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행 |
|
| 278 |
- }); |
|
| 279 |
- |
|
| 280 |
- // 관리 버튼을 감쌀 td 생성 |
|
| 281 |
- const $deleteTd = $("<td></td>").append($deleteBtn);
|
|
| 282 |
- |
|
| 283 |
- // tr에 td 추가 |
|
| 284 |
- $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd); |
|
| 285 |
- |
|
| 286 |
- // tbody에 tr 추가 |
|
| 287 |
- $tbody.append($tr); |
|
| 288 |
- }); |
|
| 289 |
- } else {
|
|
| 290 |
- alert("데이터를 불러오는 데 실패했습니다.");
|
|
| 291 |
- } |
|
| 292 |
- }, |
|
| 293 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 294 |
- }); |
|
| 295 |
-} |
|
| 296 |
- |
|
| 297 |
-function findAllCertPhone(){
|
|
| 298 |
- |
|
| 299 |
- $.ajax({
|
|
| 300 |
- type: "POST", |
|
| 301 |
- url: "/cert/ip/selectMberCertIpList.do", |
|
| 302 |
- data: null, |
|
| 303 |
- dataType:'json', |
|
| 304 |
- async: false, |
|
| 305 |
- success: function (returnData) {
|
|
| 306 |
- if (returnData.status === "OK") {
|
|
| 307 |
- const objects = returnData.object; // 배열 데이터 |
|
| 308 |
- |
|
| 309 |
- // tbody의 기존 내용 삭제 |
|
| 310 |
- const $tbody = $(".ip_table tbody");
|
|
| 311 |
- $tbody.empty(); |
|
| 312 |
- |
|
| 313 |
- // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가 |
|
| 314 |
- $.each(objects, function(index, obj) {
|
|
| 315 |
- const $tr = $("<tr></tr>"); // tr 요소 생성
|
|
| 316 |
- |
|
| 317 |
- // 각 td 요소 생성 |
|
| 318 |
- const $certIp = $("<td></td>").text(obj.certIp || "");
|
|
| 319 |
- const $certMemo = $("<td></td>").text(obj.certMemo || "");
|
|
| 320 |
- const $frstRegistPnttm = $("<td></td>").text(obj.frstRegistPnttm || "등록되지 않음");
|
|
| 321 |
- const $deleteBtn = $("<button></button>")
|
|
| 322 |
- .addClass("btnType btn_text btn_lightgray fill btn_28")
|
|
| 323 |
- .text("삭제")
|
|
| 324 |
- .attr("type", "button")
|
|
| 325 |
- .attr("id", "ipDelBtn")
|
|
| 326 |
- .on("click", function() {
|
|
| 327 |
- deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행 |
|
| 328 |
- }); |
|
| 329 |
- |
|
| 330 |
- // 관리 버튼을 감쌀 td 생성 |
|
| 331 |
- const $deleteTd = $("<td></td>").append($deleteBtn);
|
|
| 332 |
- |
|
| 333 |
- // tr에 td 추가 |
|
| 334 |
- $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd); |
|
| 335 |
- |
|
| 336 |
- // tbody에 tr 추가 |
|
| 337 |
- $tbody.append($tr); |
|
| 338 |
- }); |
|
| 339 |
- } else {
|
|
| 340 |
- alert("데이터를 불러오는 데 실패했습니다.");
|
|
| 341 |
- } |
|
| 342 |
- }, |
|
| 343 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 344 |
- }); |
|
| 345 |
-} |
|
| 346 |
- |
|
| 347 |
-// IP 삭제 |
|
| 348 |
-function deleteRow(p_ip){
|
|
| 349 |
- |
|
| 350 |
- var params = {
|
|
| 351 |
- "certIp" : p_ip |
|
| 352 |
- } |
|
| 353 |
- if(!confirm("IP를 삭제 하시겠습니까?")){
|
|
| 354 |
- return false; |
|
| 355 |
- } |
|
| 356 |
- $.ajax({
|
|
| 357 |
- type: "POST", |
|
| 358 |
- url: "/cert/ip/deleteCertIp.do", |
|
| 359 |
- data: params, |
|
| 360 |
- dataType:'json', |
|
| 361 |
- async: false, |
|
| 362 |
- success: function (returnData) {
|
|
| 363 |
- if(returnData.status == 'OK'){
|
|
| 364 |
- findAllCertIp(); |
|
| 365 |
- } |
|
| 366 |
- else |
|
| 367 |
- {
|
|
| 368 |
- alert("오류가 발생하였습니다.");
|
|
| 369 |
- } |
|
| 370 |
- }, |
|
| 371 |
- error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
|
| 372 |
- }); |
|
| 373 |
-} |
|
| 374 |
- |
|
| 375 |
- |
|
| 376 | 59 |
//기간 요일 지정 |
| 377 | 60 |
function setCalVal(val,targetObj){
|
| 378 | 61 |
$('input[name='+targetObj+']').val(val) ;
|
+++ src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
... | ... | @@ -0,0 +1,645 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 5 | + | |
| 6 | +<script language=javascript> | |
| 7 | + | |
| 8 | + | |
| 9 | +//보안 로그인 | |
| 10 | +$(document).ready(function(){ | |
| 11 | + | |
| 12 | + // 허용 IP 등록 | |
| 13 | + $(".btn_allow_ip_add").click(function () { | |
| 14 | + if (confirm("현재 접속중인 IP를 접속 허용 IP로 등록하시겠습니까?")) { | |
| 15 | + alert("접속 허용 IP 등록이 완료되었습니다."); | |
| 16 | + } else {} | |
| 17 | + }); | |
| 18 | + | |
| 19 | + // on/off 시 confirm 창 노출 | |
| 20 | + $('.security_set .tab_depth1 a').click(function () { | |
| 21 | + if ($(this).text().trim() == "ON") { | |
| 22 | + confirm("보안로그인 설정 후 로그인 시, 등록한 휴대폰번호로 추가 인증이 진행됩니다"); | |
| 23 | + } else { | |
| 24 | + confirm("가입자 휴대폰번호로 본인인증 후 해제가 가능하며, 보안로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임지지 않습니다."); | |
| 25 | + } | |
| 26 | + }); | |
| 27 | + | |
| 28 | + // 인증번호 발송 버튼 | |
| 29 | + $('#certReqBtn').on('click', function(){ | |
| 30 | + var certReqPhone = $('#certReqPhone').val(); | |
| 31 | + | |
| 32 | + if (certReqPhone==''){ | |
| 33 | + alert("핸드폰번호를 입력해주세요."); | |
| 34 | + return; | |
| 35 | + } | |
| 36 | + var params = {"mbtlnum" : certReqPhone } | |
| 37 | + $.ajax({ | |
| 38 | + type: "POST", | |
| 39 | + url : "<c:url value='/cert/phone/sendSysMsgDataAjax.do' />", | |
| 40 | + data: params, | |
| 41 | + dataType:'json', | |
| 42 | + async: false, | |
| 43 | + success: function (returnData) { | |
| 44 | + console.log('returnData : ', returnData); | |
| 45 | + if(returnData.status == 'OK'){ | |
| 46 | + alert(returnData.object.msg); | |
| 47 | + $("#certReqPhone").prop("disabled", true); | |
| 48 | + } | |
| 49 | + else | |
| 50 | + { | |
| 51 | + alert("오류가 발생하였습니다."); | |
| 52 | + } | |
| 53 | + }, | |
| 54 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 55 | + }); | |
| 56 | + }); | |
| 57 | + | |
| 58 | + // 인증 버튼 | |
| 59 | + $('#certConfirmBtn').on('click', function(){ | |
| 60 | + var certReqPhone = $('#certReqPhone').val(); | |
| 61 | + var certNumber = $('#certNumber').val(); | |
| 62 | + | |
| 63 | + if (certNumber==''){ | |
| 64 | + alert("인증번호를 입력해주세요."); | |
| 65 | + return; | |
| 66 | + } | |
| 67 | + var params = {"mbtlnum" : certReqPhone, "checkNo" : certNumber } | |
| 68 | + $.ajax({ | |
| 69 | + type: "POST", | |
| 70 | + url : "<c:url value='/cert/phone/selectSysMsgLogCheck.do' />", | |
| 71 | + data: params, | |
| 72 | + dataType:'json', | |
| 73 | + async: false, | |
| 74 | + success: function (returnData) { | |
| 75 | + console.log('returnData : ', returnData); | |
| 76 | + if(returnData.status == 'OK'){ | |
| 77 | +// alert(returnData.object.msg); | |
| 78 | + regCertPhone(params); | |
| 79 | + } | |
| 80 | + else if(returnData.status == 'BAD_REQUEST'){ | |
| 81 | + alert(returnData.message); | |
| 82 | + } | |
| 83 | + else | |
| 84 | + { | |
| 85 | + alert("오류가 발생하였습니다."); | |
| 86 | + } | |
| 87 | + }, | |
| 88 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 89 | + }); | |
| 90 | + }); | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + $('#showLoginBtn').on('click', function() { | |
| 95 | + if ($('#securityLogin').is(':visible')) { | |
| 96 | + $('#securityLogin').hide(); | |
| 97 | + } else { | |
| 98 | + $('#securityLogin').show(); | |
| 99 | + } | |
| 100 | + }); | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + // IP 추가 버튼 클릭 시 tr 추가 | |
| 105 | + $(".btn_ip_plus").click(function () { | |
| 106 | + // 추가할 HTML 구조 | |
| 107 | + const ipTr = ` | |
| 108 | + <tr class="ip-new"> | |
| 109 | + <td><input type="text" class="input_text" | |
| 110 | + oninput="this.value = this.value.replace(/[^0-9.]/g, '');" maxlength="15"/></td> | |
| 111 | + <td><input type="text" class="input_text"></td> | |
| 112 | + <td>-</td> | |
| 113 | + <td> | |
| 114 | + <button type="button" class="btnType btnType5" id="ipRegBtn">등록</button> | |
| 115 | + </td> | |
| 116 | + </tr> | |
| 117 | + `; | |
| 118 | + | |
| 119 | + // 이미 추가된 `.ip-row`가 있는지 확인 | |
| 120 | + if ($("#ipTable tbody .ip-new").length === 0) { | |
| 121 | + $("#ipTable tbody").prepend(ipTr); // 중복되지 않으면 추가 | |
| 122 | + } else { | |
| 123 | + alert("이미 추가된 항목이 있습니다."); | |
| 124 | + } | |
| 125 | + }); | |
| 126 | + | |
| 127 | + | |
| 128 | + // IP 등록버튼 | |
| 129 | + $(document).on('click', '#ipRegBtn', function () { | |
| 130 | + // 현재 클릭된 버튼의 부모 tr 요소 | |
| 131 | + const $currentRow = $(this).closest('tr'); | |
| 132 | + | |
| 133 | + // 입력값 가져오기 | |
| 134 | + const ipValue = $currentRow.find('td:eq(0) input').val(); // 첫 번째 열 (IP) | |
| 135 | + const memoValue = $currentRow.find('td:eq(1) input').val(); // 두 번째 열 (메모) | |
| 136 | + | |
| 137 | + // 예외 처리 | |
| 138 | + if (!ipValue) { | |
| 139 | + alert("등록할 IP를 입력해주세요."); | |
| 140 | + $currentRow.find('td:eq(0) input').focus(); | |
| 141 | + return; | |
| 142 | + } | |
| 143 | + | |
| 144 | + | |
| 145 | + 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]?)$/; | |
| 146 | + | |
| 147 | + if (!ipRegex.test(ipValue)) { | |
| 148 | + alert("유효하지 않은 IP 주소입니다."); | |
| 149 | + return false; | |
| 150 | + } | |
| 151 | + | |
| 152 | + var params = { | |
| 153 | + "certIp" : ipValue | |
| 154 | + , "certMemo" : memoValue | |
| 155 | + } | |
| 156 | + | |
| 157 | + if(!confirm("IP를 등록 하시겠습니까?")){ | |
| 158 | + return false; | |
| 159 | + } | |
| 160 | + $.ajax({ | |
| 161 | + type: "POST", | |
| 162 | + url: "/cert/ip/insertCertIp.do", | |
| 163 | + data: params, | |
| 164 | + dataType:'json', | |
| 165 | + async: false, | |
| 166 | + success: function (returnData) { | |
| 167 | + if(returnData.status == 'OK'){ | |
| 168 | + findAllCertIp(); | |
| 169 | + }else if(returnData.status == 'CONFLICT'){ | |
| 170 | + alert(returnData.message); | |
| 171 | + return false; | |
| 172 | + } | |
| 173 | + else | |
| 174 | + { | |
| 175 | + alert("오류가 발생하였습니다."); | |
| 176 | + } | |
| 177 | + }, | |
| 178 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 179 | + }); | |
| 180 | + }); | |
| 181 | + | |
| 182 | + | |
| 183 | + findAllCertIp(); | |
| 184 | +}); | |
| 185 | + | |
| 186 | + | |
| 187 | +function regCertPhone(params){ | |
| 188 | + | |
| 189 | + $.ajax({ | |
| 190 | + type: "POST", | |
| 191 | + url: "/cert/phone/insertCertPhone.do", | |
| 192 | + data: params, | |
| 193 | + dataType:'json', | |
| 194 | + async: false, | |
| 195 | + success: function (returnData) { | |
| 196 | + if(returnData.status == 'OK'){ | |
| 197 | + findAllCertIp(); | |
| 198 | + }else if(returnData.status == 'CONFLICT'){ | |
| 199 | + alert(returnData.message); | |
| 200 | + return false; | |
| 201 | + } | |
| 202 | + else | |
| 203 | + { | |
| 204 | + alert("오류가 발생하였습니다."); | |
| 205 | + } | |
| 206 | + }, | |
| 207 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 208 | + }); | |
| 209 | + | |
| 210 | + | |
| 211 | +} | |
| 212 | + | |
| 213 | +function findAllCertIp(){ | |
| 214 | + | |
| 215 | + $.ajax({ | |
| 216 | + type: "POST", | |
| 217 | + url: "/cert/ip/selectMberCertIpList.do", | |
| 218 | + data: null, | |
| 219 | + dataType:'json', | |
| 220 | + async: false, | |
| 221 | + success: function (returnData) { | |
| 222 | + if (returnData.status === "OK") { | |
| 223 | + const objects = returnData.object; // 배열 데이터 | |
| 224 | + | |
| 225 | + // tbody의 기존 내용 삭제 | |
| 226 | + const $tbody = $("#ipTable tbody"); | |
| 227 | + $tbody.empty(); | |
| 228 | + | |
| 229 | + // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가 | |
| 230 | + $.each(objects, function(index, obj) { | |
| 231 | + const $tr = $("<tr></tr>"); // tr 요소 생성 | |
| 232 | + | |
| 233 | + // 각 td 요소 생성 | |
| 234 | + const $certIp = $("<td></td>").text(obj.certIp || ""); | |
| 235 | + const $certMemo = $("<td></td>").text(obj.certMemo || ""); | |
| 236 | + const $frstRegistPnttm = $("<td></td>").text(obj.frstRegistPnttm || "등록되지 않음"); | |
| 237 | + const $deleteBtn = $("<button></button>") | |
| 238 | + .addClass("btnType btn_text btn_lightgray fill btn_28") | |
| 239 | + .text("삭제") | |
| 240 | + .attr("type", "button") | |
| 241 | + .attr("id", "ipDelBtn") | |
| 242 | + .on("click", function() { | |
| 243 | + deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행 | |
| 244 | + }); | |
| 245 | + | |
| 246 | + // 관리 버튼을 감쌀 td 생성 | |
| 247 | + const $deleteTd = $("<td></td>").append($deleteBtn); | |
| 248 | + | |
| 249 | + // tr에 td 추가 | |
| 250 | + $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd); | |
| 251 | + | |
| 252 | + // tbody에 tr 추가 | |
| 253 | + $tbody.append($tr); | |
| 254 | + }); | |
| 255 | + } else { | |
| 256 | + alert("데이터를 불러오는 데 실패했습니다."); | |
| 257 | + } | |
| 258 | + }, | |
| 259 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 260 | + }); | |
| 261 | +} | |
| 262 | + | |
| 263 | +function findAllCertPhone(){ | |
| 264 | + | |
| 265 | + $.ajax({ | |
| 266 | + type: "POST", | |
| 267 | + url: "/cert/ip/selectMberCertIpList.do", | |
| 268 | + data: null, | |
| 269 | + dataType:'json', | |
| 270 | + async: false, | |
| 271 | + success: function (returnData) { | |
| 272 | + if (returnData.status === "OK") { | |
| 273 | + const objects = returnData.object; // 배열 데이터 | |
| 274 | + | |
| 275 | + // tbody의 기존 내용 삭제 | |
| 276 | + const $tbody = $("#ipTable tbody"); | |
| 277 | + $tbody.empty(); | |
| 278 | + | |
| 279 | + // 배열 데이터를 기반으로 tr 생성 후 tbody에 추가 | |
| 280 | + $.each(objects, function(index, obj) { | |
| 281 | + const $tr = $("<tr></tr>"); // tr 요소 생성 | |
| 282 | + | |
| 283 | + // 각 td 요소 생성 | |
| 284 | + const $certIp = $("<td></td>").text(obj.certIp || ""); | |
| 285 | + const $certMemo = $("<td></td>").text(obj.certMemo || ""); | |
| 286 | + const $frstRegistPnttm = $("<td></td>").text(obj.frstRegistPnttm || "등록되지 않음"); | |
| 287 | + const $deleteBtn = $("<button></button>") | |
| 288 | + .addClass("btnType btn_text btn_lightgray fill btn_28") | |
| 289 | + .text("삭제") | |
| 290 | + .attr("type", "button") | |
| 291 | + .attr("id", "ipDelBtn") | |
| 292 | + .on("click", function() { | |
| 293 | + deleteRow(obj.certIp); // 삭제 버튼 클릭 시 실행 | |
| 294 | + }); | |
| 295 | + | |
| 296 | + // 관리 버튼을 감쌀 td 생성 | |
| 297 | + const $deleteTd = $("<td></td>").append($deleteBtn); | |
| 298 | + | |
| 299 | + // tr에 td 추가 | |
| 300 | + $tr.append($certIp, $certMemo, $frstRegistPnttm, $deleteTd); | |
| 301 | + | |
| 302 | + // tbody에 tr 추가 | |
| 303 | + $tbody.append($tr); | |
| 304 | + }); | |
| 305 | + } else { | |
| 306 | + alert("데이터를 불러오는 데 실패했습니다."); | |
| 307 | + } | |
| 308 | + }, | |
| 309 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 310 | + }); | |
| 311 | +} | |
| 312 | + | |
| 313 | +//IP 삭제 | |
| 314 | +function deleteRow(p_ip){ | |
| 315 | + | |
| 316 | + console.log('p_ip : ', p_ip); | |
| 317 | + var params = { | |
| 318 | + "certIp" : p_ip | |
| 319 | + } | |
| 320 | + if(!confirm("IP를 삭제 하시겠습니까?")){ | |
| 321 | + return false; | |
| 322 | + } | |
| 323 | + $.ajax({ | |
| 324 | + type: "POST", | |
| 325 | + url: "/cert/ip/deleteCertIp.do", | |
| 326 | + data: params, | |
| 327 | + dataType:'json', | |
| 328 | + async: false, | |
| 329 | + success: function (returnData) { | |
| 330 | + if(returnData.status == 'OK'){ | |
| 331 | + findAllCertIp(); | |
| 332 | + } | |
| 333 | + else | |
| 334 | + { | |
| 335 | + alert("오류가 발생하였습니다."); | |
| 336 | + } | |
| 337 | + }, | |
| 338 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 339 | + }); | |
| 340 | +} | |
| 341 | + | |
| 342 | +</script> | |
| 343 | + | |
| 344 | + <div class="mask"></div> | |
| 345 | + | |
| 346 | + <!-- 휴대폰인증 팝업 --> | |
| 347 | + <div class="tooltip-wrap"> | |
| 348 | + <div class="popup-com certify_layer popup05" tabindex="0" data-tooltip-con="popup05" data-focus="popup05" data-focus-prev="popup05-close" style="width: 500px;"> | |
| 349 | + <div class="popup_heading"> | |
| 350 | + <p>휴대폰 인증</p> | |
| 351 | + <button type="button" class="tooltip-close" data-focus="popup05-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 352 | + </div> | |
| 353 | + <div class="layer_in"> | |
| 354 | + <div class="hascont"> | |
| 355 | + <table class="layer_tType1"> | |
| 356 | + <caption>본인인증(step1) 표</caption> | |
| 357 | + <colgroup> | |
| 358 | + <col style="width: 95px"> | |
| 359 | + <col style="width: auto"> | |
| 360 | + </colgroup> | |
| 361 | + <tbody> | |
| 362 | + <tr> | |
| 363 | + <th>핸드폰번호</th> | |
| 364 | + <td> | |
| 365 | + <label for="" class="label">핸드폰번호 입력</label> | |
| 366 | + <input type="text" placeholder="‘-’없이 번호만 입력 " id="certReqPhone" onfocus="this.placeholder=''" | |
| 367 | + onblur="this.placeholder='‘-’없이 번호만 입력 '" class="inputLight" style="width: 200px;" | |
| 368 | + oninput="this.value = this.value.replace(/[^0-9]/g, '');" maxlength="14"/> | |
| 369 | + <button type="button" id="certReqBtn" class="btnType btnType6" style="width:90px">인증요청</button> | |
| 370 | + </td> | |
| 371 | + </tr> | |
| 372 | + <tr> | |
| 373 | + <th>인증번호</th> | |
| 374 | + <td> | |
| 375 | + <label for="" class="label">인증번호 입력</label> | |
| 376 | + <input type="text" placeholder="인증번호 4자리 입력" id="certNumber" onfocus="this.placeholder=''" onblur="this.placeholder='인증번호 4자리 입력'" class="inputLight" style="width: 200px;"> | |
| 377 | + <button type="button" id="certConfirmBtn" class="btnType btnType6" style="width:90px">확인</button> | |
| 378 | + </td> | |
| 379 | + </tr> | |
| 380 | + </tbody> | |
| 381 | + </table> | |
| 382 | + <div class="popup_btn_wrap2"> | |
| 383 | + <button type="button" class="tooltip-close" data-focus="popup05-close" data-focus-next="popup05">닫기</button> | |
| 384 | + </div> | |
| 385 | + </div> | |
| 386 | + </div> | |
| 387 | + </div> | |
| 388 | + </div> | |
| 389 | + <!--// 휴대폰인증 팝업 --> | |
| 390 | + | |
| 391 | +<div class="inner"> | |
| 392 | + <!-- send top --> | |
| 393 | + <div class="send_top"> | |
| 394 | + <!-- tab button --> | |
| 395 | + <%@include file="/WEB-INF/jsp/web/user/mypageHeader.jsp"%> | |
| 396 | + <!--// tab button --> | |
| 397 | + <!-- 마이페이지 - 회원해지 --> | |
| 398 | + <div class="mypage_content current" id="tab5_7"> | |
| 399 | + <div class="heading"> | |
| 400 | + <h2>보안로그인</h2> | |
| 401 | + </div> | |
| 402 | + <div class="my_dashboard"> | |
| 403 | + | |
| 404 | + <!-- 보안로그인 --> | |
| 405 | + <div class="security_login"> | |
| 406 | + | |
| 407 | + <ul class="explanation_wrap box info"> | |
| 408 | + <li>· 사이트 부정로그인으로 인한 피해를 방지할 수 있는 2차 로그인 인증 서비스입니다. </li> | |
| 409 | + <li>· 인증 휴대폰번호 추가 등록 또는 IP 접속 허용을 통해 편리한 사용이 가능합니다.</li> | |
| 410 | + <li>· 보안로그인 기능을 사용할 경우 로그인 시 등록한 휴대폰번호로 추가 인증이 진행됩니다.</li> | |
| 411 | + </ul> | |
| 412 | + | |
| 413 | + | |
| 414 | + <!-- 보안로그인 설정(허용 IP 아닌 경우) --> | |
| 415 | + <div class="security_set box"> | |
| 416 | + <div class="title_wrap"> | |
| 417 | + <p class="dashboard_title">보안로그인</p> | |
| 418 | + <div class="title_box ip_add_wrap"> | |
| 419 | + <span>현재 접속중인 IP : <b>000.000.000.00</b></span> | |
| 420 | + <button type="button" class="btnType btnType6 btn_allow_ip_add">허용 IP 등록</button> | |
| 421 | + </div> | |
| 422 | + </div> | |
| 423 | + | |
| 424 | + <div class="set_area"> | |
| 425 | + <p class="lately_date">최근 변경일시 : <span>2024-11-01 12:49</span></p> | |
| 426 | + | |
| 427 | + <div class="tab_depth1"> | |
| 428 | + <a href="#none" class="on">ON</a> | |
| 429 | + <a href="#none">OFF</a> | |
| 430 | + </div> | |
| 431 | + </div> | |
| 432 | + </div> | |
| 433 | + <!-- //보안로그인 설정(허용 IP 아닌 경우) --> | |
| 434 | + | |
| 435 | + <!-- 보안로그인 설정(허용 IP인 경우) --> | |
| 436 | + <div class="security_set box"> | |
| 437 | + <div class="title_wrap"> | |
| 438 | + <p class="dashboard_title">보안로그인</p> | |
| 439 | + <div class="title_box ip_add_wrap"> | |
| 440 | + <span>현재 접속중인 IP : <b>000.000.000.00 [허용 IP]</b></span> | |
| 441 | + </div> | |
| 442 | + </div> | |
| 443 | + | |
| 444 | + <div class="set_area"> | |
| 445 | + <p class="lately_date">최근 변경일시 : <span>2024-11-01 12:49</span></p> | |
| 446 | + | |
| 447 | + <div class="tab_depth1"> | |
| 448 | + <a href="#none" class="on">ON</a> | |
| 449 | + <a href="#none">OFF</a> | |
| 450 | + </div> | |
| 451 | + </div> | |
| 452 | + </div> | |
| 453 | + <!-- //보안로그인 설정(허용 IP인 경우) --> | |
| 454 | + | |
| 455 | + <!-- 인증 휴대폰번호 관리 --> | |
| 456 | + <div class="title_area"> | |
| 457 | + <p class="dashboard_title">인증 휴대폰번호 관리</p> | |
| 458 | + <p class="qmMark">?</p> | |
| 459 | + <div class="hover_cont" style="width:330px;left:240px;top:25px;"> | |
| 460 | + <p>인증에 사용할 휴대폰번호를 추가로 등록하여 관리할 수 있습니다. <br> | |
| 461 | + (등록 및 삭제 시 휴대폰 본인인증 필요)</p> | |
| 462 | + </div> | |
| 463 | + <button type="button" data-tooltip="popup05" class="btn_plus"><img src="/publish/images/content/mypage_plus.png" alt="더보기"></button> | |
| 464 | + </div> | |
| 465 | + | |
| 466 | + <div class="table_wrap"> | |
| 467 | + <table> | |
| 468 | + <colgroup> | |
| 469 | + <col style="width: 26%;"> | |
| 470 | + <col style="width: auto;"> | |
| 471 | + <col style="width: auto;"> | |
| 472 | + <col style="width: 26%;"> | |
| 473 | + <col style="width: 140px;"> | |
| 474 | + </colgroup> | |
| 475 | + <thead> | |
| 476 | + <tr> | |
| 477 | + <th scope="col">휴대폰번호</th> | |
| 478 | + <th scope="col">별칭</th> | |
| 479 | + <th scope="col">메모</th> | |
| 480 | + <th scope="col">등록일시</th> | |
| 481 | + <th scope="col">관리</th> | |
| 482 | + </tr> | |
| 483 | + </thead> | |
| 484 | + <tbody> | |
| 485 | + <tr> | |
| 486 | + <td colspan="5">등록된 IP 주소가 없습니다.</td> | |
| 487 | + </tr> | |
| 488 | + <!-- <tr> | |
| 489 | + <td>010-0000-0000</td> | |
| 490 | + <td class="td_memo">메모 내용</td> | |
| 491 | + <td>2024-11-04 11:54</td> | |
| 492 | + <td> | |
| 493 | + <button type="button" class="btnType btnType5 btn_edit" style="margin:0 5px 0 0;" onclick="memoEdit(this);">수정 | |
| 494 | + </button><button type="button" class="btnType btn_text btn_lightgray fill btn_28">삭제</button> | |
| 495 | + </td> | |
| 496 | + </tr> --> | |
| 497 | + </tbody> | |
| 498 | + </table> | |
| 499 | + </div> | |
| 500 | + <!-- //인증 휴대폰번호 관리 --> | |
| 501 | + | |
| 502 | + <!-- 접속 IP관리 --> | |
| 503 | + <div class="title_area"> | |
| 504 | + <p class="dashboard_title">접속 IP 관리</p> | |
| 505 | + <p class="qmMark">?</p> | |
| 506 | + <div class="hover_cont" style="width:380px;left:160px;top:25px;"> | |
| 507 | + <p>접속 IP를 미리 등록할 경우 2차 로그인 인증 없이 접속이 가능합니다. <br> | |
| 508 | + <span>(공용 PC는 보안상의 이유로 등록을 권장하지 않습니다.)</span></p> | |
| 509 | + </div> | |
| 510 | + <button type="button" class="btn_plus btn_ip_plus"><img src="/publish/images/content/mypage_plus.png" alt="더보기"></button> | |
| 511 | + </div> | |
| 512 | + | |
| 513 | + <div class="table_wrap" id="ipTable"> | |
| 514 | + <table> | |
| 515 | + <colgroup> | |
| 516 | + <col style="width: 26%;"> | |
| 517 | + <col style="width: auto;"> | |
| 518 | + <col style="width: 26%;"> | |
| 519 | + <col style="width: 100px;"> | |
| 520 | + </colgroup> | |
| 521 | + <thead> | |
| 522 | + <tr> | |
| 523 | + <th scope="col">허용IP</th> | |
| 524 | + <th scope="col">메모</th> | |
| 525 | + <th scope="col">등록일시</th> | |
| 526 | + <th scope="col">관리</th> | |
| 527 | + </tr> | |
| 528 | + </thead> | |
| 529 | + <tbody> | |
| 530 | + <tr> | |
| 531 | + <td colspan="4">등록된 IP 주소가 없습니다.</td> | |
| 532 | + </tr> | |
| 533 | +<!-- <tr> --> | |
| 534 | +<!-- <td>192.168.0.0</td> --> | |
| 535 | +<!-- <td>dadfadfjadkfjalkdjfajflajdlfjaldjflajd</td> --> | |
| 536 | +<!-- <td>2024-11-11 11:11</td> --> | |
| 537 | +<!-- <td><button type="button" class="btnType btn_text btn_lightgray fill btn_28">삭제</button></td> --> | |
| 538 | +<!-- </tr> --> | |
| 539 | + </tbody> | |
| 540 | + </table> | |
| 541 | + </div> | |
| 542 | + <!-- //접속 IP관리 --> | |
| 543 | + | |
| 544 | + | |
| 545 | + <!-- 로그인 내역 --> | |
| 546 | + <div class="title_area"> | |
| 547 | + <p class="dashboard_title">로그인 내역 <span class="small_text">로그인 내역은 최대 90일까지만 보관됩니다.</span></p> | |
| 548 | + </div> | |
| 549 | + | |
| 550 | + <div class="table_wrap"> | |
| 551 | + <table> | |
| 552 | + <colgroup> | |
| 553 | + <col style="width:calc(100% /3);"> | |
| 554 | + <col style="width:calc(100% /3);"> | |
| 555 | + <col style="width:calc(100% /3);"> | |
| 556 | + </colgroup> | |
| 557 | + <thead> | |
| 558 | + <tr> | |
| 559 | + <th scope="col">로그인 일시</th> | |
| 560 | + <th scope="col">로그인 IP</th> | |
| 561 | + <th scope="col">로그인 환경</th> | |
| 562 | + </tr> | |
| 563 | + </thead> | |
| 564 | + <tbody> | |
| 565 | + <tr> | |
| 566 | + <td>2024-11-20 13:57:12</td> | |
| 567 | + <td>119.193.215.98</td> | |
| 568 | + <td>PC</td> | |
| 569 | + </tr> | |
| 570 | + <tr> | |
| 571 | + <td>2024-11-20 13:57:12</td> | |
| 572 | + <td>119.193.215.98</td> | |
| 573 | + <td>모바일</td> | |
| 574 | + </tr> | |
| 575 | + <tr> | |
| 576 | + <td>2024-11-20 13:57:12</td> | |
| 577 | + <td>119.193.215.98</td> | |
| 578 | + <td>PC</td> | |
| 579 | + </tr> | |
| 580 | + <tr> | |
| 581 | + <td>2024-11-20 13:57:12</td> | |
| 582 | + <td>119.193.215.98</td> | |
| 583 | + <td>모바일</td> | |
| 584 | + </tr> | |
| 585 | + <tr> | |
| 586 | + <td>2024-11-20 13:57:12</td> | |
| 587 | + <td>119.193.215.98</td> | |
| 588 | + <td>PC</td> | |
| 589 | + </tr> | |
| 590 | + <tr> | |
| 591 | + <td>2024-11-20 13:57:12</td> | |
| 592 | + <td>119.193.215.98</td> | |
| 593 | + <td>모바일</td> | |
| 594 | + </tr> | |
| 595 | + <tr> | |
| 596 | + <td>2024-11-20 13:57:12</td> | |
| 597 | + <td>119.193.215.98</td> | |
| 598 | + <td>PC</td> | |
| 599 | + </tr> | |
| 600 | + <tr> | |
| 601 | + <td>2024-11-20 13:57:12</td> | |
| 602 | + <td>119.193.215.98</td> | |
| 603 | + <td>모바일</td> | |
| 604 | + </tr> | |
| 605 | + <tr> | |
| 606 | + <td>2024-11-20 13:57:12</td> | |
| 607 | + <td>119.193.215.98</td> | |
| 608 | + <td>PC</td> | |
| 609 | + </tr> | |
| 610 | + <tr> | |
| 611 | + <td>2024-11-20 13:57:12</td> | |
| 612 | + <td>119.193.215.98</td> | |
| 613 | + <td>모바일</td> | |
| 614 | + </tr> | |
| 615 | + </tbody> | |
| 616 | + </table> | |
| 617 | + </div> | |
| 618 | + <!-- //로그인 내역 --> | |
| 619 | + <!-- pagination --> | |
| 620 | + <ul class="pagination"> | |
| 621 | + <li class="page_first"><button><img src="/publish/images/content/page_first.png" alt=""></button></li> | |
| 622 | + <li class="page_prev"><button><img src="/publish/images/content/page_prev.png" alt=""></button></li> | |
| 623 | + <li class="on"><button>1</button></li> | |
| 624 | + <li><button>2</button></li> | |
| 625 | + <li><button>3</button></li> | |
| 626 | + <li><button>4</button></li> | |
| 627 | + <li><button>5</button></li> | |
| 628 | + <li><button>6</button></li> | |
| 629 | + <li><button>7</button></li> | |
| 630 | + <li><button>8</button></li> | |
| 631 | + <li><button>9</button></li> | |
| 632 | + <li><button>10</button></li> | |
| 633 | + <li class="page_next"><button><img src="/publish/images/content/page_next.png" alt=""></button></li> | |
| 634 | + <li class="page_last"><button><img src="/publish/images/content/page_last.png" alt=""></button></li> | |
| 635 | + </ul><!-- pagination --> | |
| 636 | + | |
| 637 | + </div> | |
| 638 | + <!-- //보안로그인 --> | |
| 639 | + </div> | |
| 640 | + </div> | |
| 641 | + <!--// 마이페이지 - 회원해지 --> | |
| 642 | + </div> | |
| 643 | + <!--// send top --> | |
| 644 | +</div> | |
| 645 | +<!--// content 영역 --> |
--- src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
... | ... | @@ -36,8 +36,9 @@ |
| 36 | 36 |
<li class="tab" id="mberSecession"> |
| 37 | 37 |
<button type="button" onclick="TabType5(this,'6'); location.href='/web/user/mberSecession.do'">회원탈퇴</button> |
| 38 | 38 |
</li> |
| 39 |
- <li class="tab" id="kisaReport"> |
|
| 40 |
- <button type="button" onclick="TabType5(this,'7'); location.href='/web/user/kisaReport.do'">KISA 신고</button> |
|
| 39 |
+ <li class="tab" id="mberSecureLogin"> |
|
| 40 |
+<!-- <button type="button" onclick="TabType5(this,'7'); location.href='/web/user/kisaReport.do'">KISA 신고</button> --> |
|
| 41 |
+ <button type="button" onclick="TabType5(this,'7'); location.href='/web/user/mberSecureLogin.do'">보안로그인</button> |
|
| 41 | 42 |
</li> |
| 42 | 43 |
</ul> |
| 43 | 44 |
<!--// tab button -->(No newline at end of file) |
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?