ID/PASS 찾기 1차 반영

This commit is contained in:
nhj 2026-01-15 09:40:31 +09:00
parent 24054eaf40
commit 7334350e98
10 changed files with 621 additions and 10 deletions

View File

@ -147,7 +147,7 @@ public class RestApiCallUtil
String strFullReturnData = returnObj.toString(); String strFullReturnData = returnObj.toString();
// 개발완료 주석처리 // 개발완료 주석처리
log.info("전체 리턴값 => [{}]", returnObj.toString()); // log.info("전체 리턴값 => [{}]", returnObj.toString());
// Map 변환처리 // Map 변환처리
Map<String, Object> returnMap = null; Map<String, Object> returnMap = null;

View File

@ -54,12 +54,17 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
@Override @Override
public void configure(HttpSecurity http) throws Exception public void configure(HttpSecurity http) throws Exception
{ {
// 2026.01.14 나혁제 공통팝업 허용처리
http.csrf().disable() http.csrf().disable()
.authorizeRequests() .authorizeRequests()
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.antMatchers("/main/actionMain.do" ).permitAll() .antMatchers("/main/actionMain.do" ).permitAll()
.antMatchers("/logout*.do" ).permitAll() .antMatchers("/logout*.do" ).permitAll()
.antMatchers("/main/logout.do" ).permitAll() .antMatchers("/main/logout.do" ).permitAll()
.antMatchers("/common/PageRedirection.do" ).permitAll()
.antMatchers("/main/searchIdFind.do" ).permitAll()
.antMatchers("/main/UserPasswordResetExt.do" ).permitAll()
.antMatchers("/egov/js/**" ).permitAll()
.antMatchers("/").permitAll() .antMatchers("/").permitAll()
.and() .and()
.headers().frameOptions().disable() .headers().frameOptions().disable()

View File

@ -52,7 +52,7 @@ public class CustomSuccessHandler extends SavedRequestAwareAuthenticationSuccess
, HttpServletResponse response , HttpServletResponse response
, Authentication authentication) throws ServletException, IOException , Authentication authentication) throws ServletException, IOException
{ {
log.debug(">>>>>>>>>> CustomSuccessHandler onAuthenticationSuccess <<<<<<<<<<"); log.info(">>>>>>>>>> CustomSuccessHandler onAuthenticationSuccess <<<<<<<<<<");
log.info("### login success => {}", authentication.getAuthorities()); log.info("### login success => {}", authentication.getAuthorities());
@ -96,7 +96,7 @@ public class CustomSuccessHandler extends SavedRequestAwareAuthenticationSuccess
super.onAuthenticationSuccess(request, response, authentication); super.onAuthenticationSuccess(request, response, authentication);
log.debug("<<<<<<<<<< CustomSuccessHandler onAuthenticationSuccess >>>>>>>>>>"); log.info("<<<<<<<<<< CustomSuccessHandler onAuthenticationSuccess >>>>>>>>>>");
} }

View File

@ -1,6 +1,7 @@
package com.urpsys.basefront.controller; package com.urpsys.basefront.controller;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -14,9 +15,11 @@ import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.FieldNamingPolicy; import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -29,6 +32,7 @@ import com.urpsys.basefront.domain.MemberVO;
import com.urpsys.basefront.domain.TokenInfo; import com.urpsys.basefront.domain.TokenInfo;
import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO; import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO;
import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO; import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO;
import com.urpsys.itmsfront.sys.domain.UserManageVO;
import kong.unirest.HttpResponse; import kong.unirest.HttpResponse;
import kong.unirest.JsonNode; import kong.unirest.JsonNode;
@ -415,6 +419,81 @@ public class MainController
return "main/inc/IncFooter"; return "main/inc/IncFooter";
} }
/**
* ID 찾기를 수행한다.
* @author urp 인프라본부 나혁제
* 작성일 : 2026.01.14
*/
@ResponseBody
@RequestMapping(value="/main/searchIdFind.do")
public LinkedHashMap<String, Object> searchIdFind( HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /main/searchIdFind.do <<<<<<<<<<<<<<<");
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
bodyMap.put("userNm" , CommonUtil.getData(request, "userNm"));
bodyMap.put("userEmail" , CommonUtil.getData(request, "userEmail"));
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/searchIdFind.do");
// RestApi Call End ---------------------------------
String userId = (String)returnMap.get("userId");
resBody.put("userId", userId );
log.info("<<<<<<<<<<<<<<< /main/searchIdFind.do >>>>>>>>>>>>>>>");
return resBody;
}
/**
* 패스워드 초기화 수행한다.
* @author urp 인프라본부 나혁제
* 작성일 : 2026.01.14
*/
@ResponseBody
@RequestMapping(value="/main/UserPasswordResetExt.do")
public LinkedHashMap<String, Object> UserPasswordResetExt( HttpServletRequest request
, HttpServletResponse response ) throws Exception
{
log.info(">>>>>>>>>>>>>>> /main/UserPasswordResetExt.do <<<<<<<<<<<<<<<");
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>(); // Response Map
// api in/out map 정의
Map<String, Object> bodyMap = new LinkedHashMap();
Map<String, Object> returnMap = new LinkedHashMap();
bodyMap.put("userId" , CommonUtil.getData(request, "userId"));
bodyMap.put("userNm" , CommonUtil.getData(request, "userNm"));
bodyMap.put("userEmail" , CommonUtil.getData(request, "userEmail"));
// RestApi Call Start ---------------------------------
returnMap = restApiCallUtil.RestApiCallNoAuth(bodyMap, "/main/UserPasswordResetExt.do");
// RestApi Call End ---------------------------------
int resultCd = (int)returnMap.get("resultCd");
String resultMsg = (String)returnMap.get("resultMsg");
resBody.put("resultCd" , resultCd );
resBody.put("resultMsg" , resultMsg );
log.info("<<<<<<<<<<<<<<< /main/UserPasswordResetExt.do >>>>>>>>>>>>>>>");
return resBody;
}

View File

@ -56,6 +56,10 @@ public class urpCommonController
{ {
strMovePage = "uritms-popup1"+ strPage; strMovePage = "uritms-popup1"+ strPage;
} }
else if(strPopupYn.equals("B"))
{
strMovePage = "uritms-base-popup1"+ strPage;
}
else else
{ {
strMovePage = "uritms-tiles2"+ strPage; strMovePage = "uritms-tiles2"+ strPage;
@ -67,7 +71,7 @@ public class urpCommonController
model.addAttribute("Param04" , strParam04 ); model.addAttribute("Param04" , strParam04 );
model.addAttribute("Param06" , strParam05 ); model.addAttribute("Param06" , strParam05 );
log.info("strMovePage [{}]", strMovePage);
log.info("<<<<<<<<<<<<<<< /common/PageRedirection.do >>>>>>>>>>>>>>>"); log.info("<<<<<<<<<<<<<<< /common/PageRedirection.do >>>>>>>>>>>>>>>");
return strMovePage; return strMovePage;

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%-- <%--
Class Name : LoginUsr.jsp Class Name : LoginUsr.jsp
Description : 로그인화면 Description : 로그인화면
@ -17,7 +19,9 @@
<c:set var="ctx" value="${pageContext.request.contextPath}"/> <c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <title> UR-ITSM </title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<html> <html>
@ -38,8 +42,15 @@
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script> <script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
<!-- 2026.01.14 나혁제 공통팝업처리 -->
<script type="text/javascript" src="${ctx}/egov/js/showModalDialog.js"></script>
</head> </head>
<script type="text/javascript"> <script type="text/javascript">
//---------------------------------------- //----------------------------------------
@ -142,6 +153,59 @@
document.cookie = name + "= " + "; expires=" + expireDate.toGMTString(); document.cookie = name + "= " + "; expires=" + expireDate.toGMTString();
} }
//----------------------------------------
// 2026.01.14 나혁제 추가
// ID 찾기
// ----------------------------------------
function fncIdFindOpen()
{
PopupOpen("/main/PopIdFind", 470, 450, '');
}
//----------------------------------------
// 2026.01.14 나혁제 추가
// 패스워드 초기화
// ----------------------------------------
function fncPopPassworkdResetOpen()
{
PopupOpen("/main/PopPasswordReset", 380, 450, '');
}
//----------------------------------------
// 팝업 오픈
// ----------------------------------------
function PopupOpen(strUrl, hei, wid, pagetitle)
{
var page = "/common/PageRedirection.do?Page="+ strUrl
+ "&PopupYn=B";
var $dialog = $('<div></div>')
.html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
.dialog({
autoOpen: false
, modal: true
, height: hei
, width: wid
, title: pagetitle
, open: function (event, ui)
{
$(".ui-icon-closethick").remove(); // 닫기 버튼 제거
$('.ui-dialog-titlebar-close').css({
width: '30px' // 닫기 버튼 너비
// , height: '50px' // 닫기 버튼 높이
});
$(this).parent().find(".ui-dialog-titlebar").hide(); // 타이틀바 안보이게 처리
}
, closeText: '닫기'
});
$dialog.dialog('open');
// 팝업 화면 맨앞으로 배치
$(".ui-dialog").css("z-index", "99");
}
/* /*
@ -201,6 +265,16 @@
</form:form> </form:form>
<div class="btn_group">
<div>
<button type="button" class="btn-function" title="ID 찾기" onclick="fncIdFindOpen(); return false;" style="background: cadetblue;" >ID 찾기</button>
<button type="button" class="btn-function" title="패스워드초기화" onclick="fncPopPassworkdResetOpen(); return false;" style="background: cadetblue;" >PASSWORD 초기화</button>
&nbsp;&nbsp;&nbsp;&nbsp;
<button type="button" class="btn-function" title="자산등록" onclick="fncMultiResourceInsert(); return false;" style="background: blue;" >회원가입</button>
</div>
</div>
</div> </div>
</div> </div>
<!--//loginWrap :e --> <!--//loginWrap :e -->

View File

@ -0,0 +1,187 @@
<!DOCTYPE html>
<%--
/**
* @Class Name : PopIdFind.jsp
* @Description : ID 찾기 팝엄 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ---------- -------- ---------------------------
* @ 2026.01.14 나혁제 최초 생성
*
* @author urp 인프라본부 나혁제
* @since 2026.01.14
* @version 1.0
* @see
*
*/
--%>
<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<c:set var="pageTitle"><spring:message code="comCopSecDrm.deptSearchPopup.title"/></c:set>
<title>ID 찾기</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript" defer="defer">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
});
//----------------------------------------
// 닫기
// ----------------------------------------
function fncIdFind()
{
if ($('#userNm').val()=='')
{
alert("성명을 입력하세요");
return false;
}
else if ($('#userEmail').val()=='')
{
alert("Email 입력하세요");
return false;
}
else
{
proc.fn_id_find();
}
}
//----------------------------------------
// 닫기
// ----------------------------------------
function fncClose()
{
parent.$('.ui-dialog-content').dialog('close');
}
// 서블릿 통신
var proc =
{
// 인스던트 처리완료
fn_id_find : function ()
{
var form = $('#PopIdFind')[0];
var formData = new FormData(form);
$.ajax({
url: '/main/searchIdFind.do'
, type: 'post'
, enctype:'multipart/form-data'
, data: formData
, dataType: 'json'
, processData:false
, contentType:false
, cache:false
, success: function(data)
{
$('#userId').val(data.userId);
},
error: function(errorThrown)
{
alert("ID 찾기 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form name="PopIdFind" id="PopIdFind" action="" method="post">
<!-- main title -->
<div class="main_titWrap">
<h3>ID 찾기</h3>
</div>
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!--등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>처리완료</caption>
<colgroup>
<col style="width: 30%;">
<col style="width: *;">
</colgroup>
<tbody>
<tr>
<th>
성명
</th>
<td>
<input type="text" name="userNm" id="userNm" class="txt_id" >
</td>
</tr>
<tr>
<th>
E-Mail
</th>
<td>
<input type="text" name="userEmail" id="userEmail" class="txt_id" >
</td>
</tr>
</tbody>
</table>
<div class="btn_group">
<button type="button" class="btn-function" id="btnConfirm" onclick="javascript:fncIdFind()" title="조회">조회</button>
</div>
</div>
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!--등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>처리완료</caption>
<colgroup>
<col style="width: 30%;">
<col style="width: *;">
</colgroup>
<tbody>
<tr>
<th>
ID
</th>
<td>
<input type="text" name="userId" id="userId" class="txt_id" readonly >
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_group">
<button type="button" class="btn-cancel" id="btnCancel" onclick="javascript:fncClose()" title="닫기">닫기</button>
</div>
</form:form>

View File

@ -0,0 +1,175 @@
<!DOCTYPE html>
<%--
/**
* @Class Name : PopPasswordReset.jsp
* @Description : Password 초기화 팝엄 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ---------- -------- ---------------------------
* @ 2026.01.14 나혁제 최초 생성
*
* @author urp 인프라본부 나혁제
* @since 2026.01.14
* @version 1.0
* @see
*
*/
--%>
<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<c:set var="pageTitle"><spring:message code="comCopSecDrm.deptSearchPopup.title"/></c:set>
<title>ID 찾기</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript" defer="defer">
//----------------------------------------
// 화면 초기화
// ----------------------------------------
$(document).ready(function()
{
});
//----------------------------------------
// 패스워드 초기화
// ----------------------------------------
function fncPasswordReset()
{
if ($('#userId').val()=='')
{
alert("성명을 입력하세요");
return false;
}
if ($('#userNm').val()=='')
{
alert("성명을 입력하세요");
return false;
}
else if ($('#userEmail').val()=='')
{
alert("Email 입력하세요");
return false;
}
else
{
proc.fn_password_reset();
}
}
//----------------------------------------
// 닫기
// ----------------------------------------
function fncClose()
{
parent.$('.ui-dialog-content').dialog('close');
}
// 서블릿 통신
var proc =
{
// 인스던트 처리완료
fn_password_reset : function ()
{
var form = $('#PopPasswordReset')[0];
var formData = new FormData(form);
$.ajax({
url: '/main/UserPasswordResetExt.do'
, type: 'post'
, enctype:'multipart/form-data'
, data: formData
, dataType: 'json'
, processData:false
, contentType:false
, cache:false
, success: function(data)
{
alert(JSON.stringify(data));
// $('#userId').val(data.userId);
},
error: function(errorThrown)
{
alert("ID 찾기 오류가 발생하였습니다. \n 시스템 관리자에게 문의해 주시기 바랍니다.");
console.log(JSON.stringify(errorThrown));
}
});
}
}
</script>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form name="PopPasswordReset" id="PopPasswordReset" action="" method="post">
<!-- main title -->
<div class="main_titWrap">
<h3>PASSWORD 초기화</h3>
</div>
<!-- Form 테이블 :start -->
<div class="bbs_view">
<!--등록폼 -->
<table class="tbl_form" summary="<spring:message code="common.summary.list" arguments="등록" />">
<caption>처리완료</caption>
<colgroup>
<col style="width: 30%;">
<col style="width: *;">
</colgroup>
<tbody>
<tr>
<th>
성명
</th>
<td>
<input type="text" name="userId" id="userId" class="txt_id" >
</td>
</tr>
<tr>
<th>
성명
</th>
<td>
<input type="text" name="userNm" id="userNm" class="txt_id" >
</td>
</tr>
<tr>
<th>
E-Mail
</th>
<td>
<input type="text" name="userEmail" id="userEmail" class="txt_id" >
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_group">
<button type="button" class="btn-function" id="btnConfirm" onclick="javascript:fncPasswordReset()" title="조회">패스워드 초기화</button>
<button type="button" class="btn-cancel" id="btnCancel" onclick="javascript:fncClose()" title="닫기">닫기</button>
</div>
</form:form>

View File

@ -0,0 +1,64 @@
<%--
Class Name : portal-popup1.jsp
Description : Tiles 팝업 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026.01.14 나혁제 최초 생성
author : urp 인프라본부 나혁제
since : 2026.01.14
--%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Language" content="ko" >
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="keywords" content="urITSM">
<meta name="description" content="urITSM 에 오신것을 환영합니다.">
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
<link rel="stylesheet" type="text/css" href="${ctx}/css/import.css">
<script type="text/javascript" src="${ctx}/js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="${ctx}/js/common_script.js"></script>
<link rel="stylesheet" href="${ctx}/js/js-calendar/calendar-jquery-ui.css">
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/jquery-ui.js"></script>
<script type="text/javascript" src="${ctx}/js/js-calendar/calendar.js"></script>
</head>
<body>
<div class="wrap">
<!-- container :s -->
<div id="container">
<!-- inner :s -->
<div class="body_wrap" style=" width: 96%;text-align: center;margin-right:2%;">
<tiles:insertAttribute name="body" />
</div>
<!--//inner :e -->
</div>
<!--//container :e -->
</div>
</body>
</html>

View File

@ -36,6 +36,11 @@
<put-attribute name="body" value="" /> <put-attribute name="body" value="" />
</definition> </definition>
<!-- 2026.01.14 나혁제 추가 -->
<definition name="uritms-base-popup1" template="/WEB-INF/jsp/tilesLayout/uritms-base-popup1.jsp">
<put-attribute name="body" value="" />
</definition>
<definition name="tiles/*" extends="main-layout"> <definition name="tiles/*" extends="main-layout">
@ -98,7 +103,7 @@
<!-- left menu no end --> <!-- left menu no end -->
<!-- popup start --> <!-- popup itsm start -->
<definition name="uritms-popup1/*" extends="uritms-popup1"> <definition name="uritms-popup1/*" extends="uritms-popup1">
<put-attribute name="body" value="/WEB-INF/jsp/itms/{1}.jsp" /> <put-attribute name="body" value="/WEB-INF/jsp/itms/{1}.jsp" />
</definition> </definition>
@ -110,7 +115,25 @@
<definition name="uritms-popup1/*/*/*" extends="uritms-popup1"> <definition name="uritms-popup1/*/*/*" extends="uritms-popup1">
<put-attribute name="body" value="/WEB-INF/jsp/itms/{1}/{2}/{3}.jsp" /> <put-attribute name="body" value="/WEB-INF/jsp/itms/{1}/{2}/{3}.jsp" />
</definition> </definition>
<!-- popup end --> <!-- popup itsm end -->
<!-- 2026.01.06 나혁제 추가 -->
<!-- popup base start -->
<definition name="uritms-base-popup1/*" extends="uritms-base-popup1">
<put-attribute name="body" value="/WEB-INF/jsp/{1}.jsp" />
</definition>
<definition name="uritms-base-popup1/*/*" extends="uritms-base-popup1">
<put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
<definition name="uritms-base-popup1/*/*/*" extends="uritms-base-popup1">
<put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
</definition>
<!-- popup base end -->