2023-06-20 17:09

This commit is contained in:
myname 2023-06-20 17:10:10 +09:00
parent b2d62ee41c
commit 3a47a5486a
10 changed files with 360 additions and 72 deletions

View File

@ -30,6 +30,8 @@ public interface EgovLoginLogService {
*/ */
public void logInsertLoginLog(LoginLog loinLog) throws Exception; public void logInsertLoginLog(LoginLog loinLog) throws Exception;
public int logInsertLoginLogNewStep1(LoginLog loinLog) throws Exception;
/** /**
* 접속로그를 조회한다. * 접속로그를 조회한다.
* *

View File

@ -62,6 +62,37 @@ public class EgovLoginLogServiceImpl extends EgovAbstractServiceImpl implements
loginLogDAO.logInsertWebLoginLog(loinLog); //사용자 페이지의 로그만 남김(메뉴에 등록된 페이지만 남김) loginLogDAO.logInsertWebLoginLog(loinLog); //사용자 페이지의 로그만 남김(메뉴에 등록된 페이지만 남김)
} }
public int logInsertLoginLogNewStep1(LoginLog loinLog) throws Exception {
// TODO Auto-generated method stub
String logId = egovLoginLogIdGnrService.getNextStringId();
loinLog.setLogId(logId);
//loginLogDAO.logInsertLoginLog(loinLog);
int i=loginLogDAO.logInsertWebLoginLogNewStep1(loinLog); //사용자 페이지의 로그만 남김(메뉴에 등록된 페이지만 남김)
System.out.println("=====i=====");
System.out.println(i);
System.out.println(i);
try {
if (loinLog.getUrl().length()>400) {
loinLog.setUrl(loinLog.getUrl().substring(0,399));
}
if (i<=0) i=loginLogDAO.logInsertWebLoginLogNewStep2(loinLog); //사용자 페이지의 로그만 남김(메뉴에 등록된 페이지만 남김)
}catch(Exception ex) {
ex.printStackTrace();
}
System.out.println("=====i=====");
System.out.println(i);
System.out.println(i);
return i;
}
/** /**
* 접속로그를 조회한다. * 접속로그를 조회한다.
* *

View File

@ -135,6 +135,14 @@ public class LoginLogDAO extends EgovAbstractDAO {
insert("LoginLogDAO.logInsertWebLoginLog", loinLog); insert("LoginLogDAO.logInsertWebLoginLog", loinLog);
} }
public int logInsertWebLoginLogNewStep1(LoginLog loinLog) throws Exception{
return update("LoginLogDAO.logInsertWebLoginLogNewStep1", loinLog);
}
public int logInsertWebLoginLogNewStep2(LoginLog loinLog) throws Exception{
return update("LoginLogDAO.logInsertWebLoginLogNewStep2", loinLog);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<LoginLog> selectWebLogList(LoginLog loginLog) throws Exception{ public List<LoginLog> selectWebLogList(LoginLog loginLog) throws Exception{
return (List<LoginLog>)list("LoginLogDAO.selectWebLogList", loginLog); return (List<LoginLog>)list("LoginLogDAO.selectWebLogList", loginLog);

View File

@ -3,6 +3,10 @@ package kcc.let.sym.log.lgm.service.impl;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
@ -10,10 +14,6 @@ import kcc.com.cmm.LoginVO;
import kcc.let.sym.log.lgm.service.EgovSysLogService; import kcc.let.sym.log.lgm.service.EgovSysLogService;
import kcc.let.sym.log.lgm.service.SysLog; import kcc.let.sym.log.lgm.service.SysLog;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
/** /**
* 로그관리(시스템) 위한 서비스 구현 클래스 * 로그관리(시스템) 위한 서비스 구현 클래스
* @author 공통서비스개발팀 이삼섭 * @author 공통서비스개발팀 이삼섭
@ -108,7 +108,27 @@ public class EgovSysLogServiceImpl extends EgovAbstractServiceImpl implements
if(null != loginVO){ if(null != loginVO){
sysLog.setSiteId(loginVO.getSiteId()); sysLog.setSiteId(loginVO.getSiteId());
} }
sysLogDAO.logInsertAdminSysLog(sysLog); //sysLogDAO.logInsertAdminSysLog(sysLog);
int i = sysLogDAO.logInsertAdminSysLogNewStep1(sysLog);
System.out.println("=====i=====");
System.out.println(i);
System.out.println(i);
try {
if (i<=0) {
if (sysLog.getUrl().length()>1000) sysLog.setUrl(sysLog.getUrl().substring(0,1000));
i = sysLogDAO.logInsertAdminSysLogNewStep2(sysLog);
System.out.println("=====i=====");
System.out.println(i);
System.out.println(i);
}
}catch(Exception ex) {
System.out.println(ex.getMessage());
}
} }
} }

View File

@ -2,11 +2,11 @@ package kcc.let.sym.log.lgm.service.impl;
import java.util.List; import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import kcc.let.sym.log.lgm.service.SysLog; import kcc.let.sym.log.lgm.service.SysLog;
import org.springframework.stereotype.Repository;
/** /**
* 로그관리(시스템) 위한 데이터 접근 클래스 * 로그관리(시스템) 위한 데이터 접근 클래스
* @author 공통서비스개발팀 이삼섭 * @author 공통서비스개발팀 이삼섭
@ -96,4 +96,14 @@ public class SysLogDAO extends EgovAbstractDAO {
} }
public int logInsertAdminSysLogNewStep1(SysLog sysLog) throws Exception{
return update("SysLogDAO.logInsertAdminSysLogNewStep1", sysLog);
}
public int logInsertAdminSysLogNewStep2(SysLog sysLog) throws Exception{
return update("SysLogDAO.logInsertAdminSysLogNewStep2", sysLog);
}
} }

View File

@ -314,6 +314,9 @@ public class OprtnStateMngController {
}*/ }*/
vEEduAplctVO.setLastUpdusrId(loginVO.getUniqId()); vEEduAplctVO.setLastUpdusrId(loginVO.getUniqId());
vEEduOprtnVO.setLastUpdusrId(loginVO.getUniqId()); vEEduOprtnVO.setLastUpdusrId(loginVO.getUniqId());
vEEduAplctVO = egovCryptoUtil.encryptVEEduAplctVOInfo(vEEduAplctVO);
vEEduAplctService.update(vEEduAplctVO); vEEduAplctService.update(vEEduAplctVO);
vEEduOprtnService.adminUpdate(vEEduOprtnVO); vEEduOprtnService.adminUpdate(vEEduOprtnVO);
modelAndView.addObject("result", "success"); modelAndView.addObject("result", "success");

View File

@ -782,7 +782,10 @@ public class MainController {
}else { }else {
loginLog.setUrl(request.getRequestURI()); loginLog.setUrl(request.getRequestURI());
} }
loginLogService.logInsertLoginLog(loginLog); //loginLogService.logInsertLoginLog(loginLog);
loginLogService.logInsertLoginLogNewStep1(loginLog);
} }
//오늘 접속 / 최종접속 //오늘 접속 / 최종접속

View File

@ -433,6 +433,67 @@
AND B.URL = #url# AND B.URL = #url#
</insert> </insert>
<!-- 사용자 접속 로그 등록(매뉴에 등록된 페이지만 )-->
<update id="LoginLogDAO.logInsertWebLoginLogNewStep1" parameterClass="loginLog">
/* 임시.*NOT_SQL_LOG.* */
/* 2023-06-20일 저장확인을 위해 update 추가함*/
INSERT INTO LETTNLOGINLOG
( LOG_ID
, CONECT_ID
, CONECT_IP
, USER_AT
, DEVICE_TYPE /**인테넛,모바일 */
, PROGRM_FILE_NM
, MENU_NO
, MENU_NM
, URL
, CREAT_DT )
SELECT
#logId#
, #loginId#
, #loginIp#
, #userAt# /**A:관리자, U:홈페이지 */
, #deviceType#
, A.PROGRM_FILE_NM
, A.MENU_NO
, A.MENU_NM
, #url#
, NOW()
FROM LETTNMENUINFO A
INNER JOIN LETTNPROGRMLIST B ON A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
WHERE B.URL IS NOT NULL
AND B.URL != ''
AND B.URL = #url#
</update>
<!-- 사용자 접속 로그 등록(매뉴에 없는 페이지 등록용 )-->
<update id="LoginLogDAO.logInsertWebLoginLogNewStep2" parameterClass="loginLog">
/* 임시.*NOT_SQL_LOG.* */
/* 2023-06-20일 저장확인을 위해 update 추가함*/
INSERT INTO LETTNLOGINLOG
( LOG_ID
, CONECT_ID
, CONECT_IP
, USER_AT
, DEVICE_TYPE /**인테넛,모바일 */
, PROGRM_FILE_NM
, MENU_NO
, MENU_NM
, URL
, CREAT_DT )
SELECT
#logId#
, #loginId#
, #loginIp#
, #userAt# /**A:관리자, U:홈페이지 */
, #deviceType#
, 'PROGRM_FILE_NM'
, '999999999'
, 'MENU_NM'
, #url#
, NOW()
</update>
<!-- 사용자 메뉴별 접속 리스트 --> <!-- 사용자 메뉴별 접속 리스트 -->
<select id="LoginLogDAO.selectWebLogList" parameterClass="loginLog" resultClass="loginLog"> <select id="LoginLogDAO.selectWebLogList" parameterClass="loginLog" resultClass="loginLog">
/* 임시.*NOT_SQL_LOG.* */ /* 임시.*NOT_SQL_LOG.* */

View File

@ -192,5 +192,59 @@
</isEmpty> </isEmpty>
LIMIT 1 LIMIT 1
</insert> </insert>
<!-- 시스템 관리자 로그 등록(LETTNADMINMETHOD 테이블에 등록된 것만 insert) -->
<update id="SysLogDAO.logInsertAdminSysLogNewStep1" parameterClass="sysLog">
INSERT INTO LETTNADMINLOG
( ADMINLOG_ID
, CONECT_ID
, CONECT_IP
, CREAT_DT
, PROGRM_FILE_NM
, MENU_NM
, APPRO_NM
, URL
)
SELECT #requstId# ,
#rqesterId# ,
#rqesterIp# ,
now(),
#methodNm#,
MENU_NM ,
APPRO_NM ,
#url#
FROM LETTNADMINMETHOD
WHERE METHOD_NM = #methodNm#
<isNotEmpty prepend="AND" property="param">
PARAM = #param#
</isNotEmpty>
<isEmpty prepend="AND" property="param">
PARAM = 'N'
</isEmpty>
LIMIT 1
</update>
<!-- 시스템 관리자 로그 등록(LETTNADMINMETHOD 테이블에 등록된 것만 insert) -->
<update id="SysLogDAO.logInsertAdminSysLogNewStep2" parameterClass="sysLog">
INSERT INTO LETTNADMINLOG
( ADMINLOG_ID
, CONECT_ID
, CONECT_IP
, CREAT_DT
, PROGRM_FILE_NM
, MENU_NM
, APPRO_NM
, URL
)
SELECT #requstId# ,
#rqesterId# ,
#rqesterIp# ,
now(),
#methodNm#,
'MENU_NM' ,
'APPRO_NM' ,
#url#
</update>
</sqlMap> </sqlMap>

View File

@ -86,47 +86,112 @@ function logListExcelDownload(){
document.frm.action = "<c:url value='/sym/log/clg/roleListExcelDownload.do'/>"; document.frm.action = "<c:url value='/sym/log/clg/roleListExcelDownload.do'/>";
document.frm.submit(); document.frm.submit();
} }
function fncReset(thisObj){
var targetObj = $(thisObj).closest('.list_top').find('select,input');
$.each(targetObj, function(){
if($(this).prop('tagName') == 'SELECT'){
if($(this).attr('name').indexOf('Month') != -1){
$(this).val(new Date().getMonth()+1);
}else if($(this).attr('name').indexOf('Year') != -1){
$(this).val(new Date().getFullYear());
}else{
$(this).prop("selectedIndex", 0);
}
}else{
$(this).val('');
}
});
}
</script> </script>
<title>로그인 로그 목록</title>
</head> </head>
<body> <body>
<noscript>자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript> <noscript>자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
<form name="frm" id="frm" action ="<c:url value='/sym/log/clg/SelectLoginLogList.do'/>" method="post"> <form name="frm" id="frm" action ="<c:url value='/sym/log/clg/SelectLoginLogList.do'/>" method="post">
<input type="hidden" name="cal_url" value="<c:url value='/sym/cmm/EgovNormalCalPopup.do'/>" /> <input type="hidden" name="cal_url" value="<c:url value='/sym/cmm/EgovNormalCalPopup.do'/>" />
<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/> <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" /> <input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" /> <input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> <div class="cont_wrap">
<h2 class="titType1 c_222222 fwBold">관리자로그관리</h2> <div class="box">
<p class="tType6 c_999999">권한 코드별로 권한을 파악할 수 있으며, 권한을 등록, 수정, 삭제할 수 있습니다.</p> <!-- cont_tit -->
<div class="cont_tit">
<h2>관리자로그</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>운영관리</p>
</li>
<li><span class="cur_nav">관리자로그</span></li>
</ul>
</div> </div>
<div class="pageCont"> <!-- //cont_tit -->
<div class="listSerch">
<select name="searchCondition" id="searchCondition" class="select" title="검색조건선택"> <div class="cont">
<!-- list_top -->
<div class="list_top">
<div class="list_top_1">
<div class="util_left">
<p>조회조건</p>
</div>
<div class="util_right">
<select class="sel2 searchSel sel_type1" id="searchCondition" name="searchCondition" title="조회조건">
<option value='' <c:if test="${searchVO.searchCondition == ''}">selected</c:if> >전체</option> <option value='' <c:if test="${searchVO.searchCondition == ''}">selected</c:if> >전체</option>
<option value='1' <c:if test="${searchVO.searchCondition == '1'}">selected</c:if>>메뉴명</option> <option value='1' <c:if test="${searchVO.searchCondition == '1'}">selected</c:if>>메뉴명</option>
<option value='2' <c:if test="${searchVO.searchCondition == '2'}">selected</c:if>>URL</option> <option value='2' <c:if test="${searchVO.searchCondition == '2'}">selected</c:if>>URL</option>
</select> </select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="25" title="검색" maxlength="50"/>
<input type="button" class="btnType1" value="검색" onclick="fn_select('1'); return false;"> <input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>" class="search_input" placeholder="검색어를 입력하세요">
<button class="btn_type08" onclick="fn_select('1'); return false;">검색</button>
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
</div>
</div> </div>
<div class="listTop"> <div class="list_top_2">
<p class="tType5">리스트 수 : <span class="tType4 c_456ded fwBold"><c:out value="${paginationInfo.totalRecordCount}"/></span>건</p> <div class="util_left">
<div class="rightWrap"> <p>등록일자</p>
<input type="button" class="excelBtn" onclick="javascript:logListExcelDownload();"> </div>
<input type="button" class="printBtn" > <div class="util_right">
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);"> <div class="calendar_wrap">
<input type="text" class="calendar" title="시작일 선택" id="searchStartDt" name="searchStartDt" value="${searchVO.searchStartDt}">
</div>
~
<div class="calendar_wrap">
<input type="text" class="calendar" title="종료일 선택" id="endDate" name="searchEndDt" value="${searchVO.searchEndDt}">
</div>
</div>
</div>
</div>
<!-- //list_top -->
<!-- list util -->
<div class="list_util">
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
<div>
<select class="sel_type1" name="pageUnit" id="pageUnit" onchange="linkPage(1);" title="줄 선택" style="width: 140px">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option> <option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option> <option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option> <option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
<option value='100' <c:if test="${searchVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select> </select>
<!--
<button type="button" class="btn_type03" onclick="fncPrintListPopup(); return false;">신청서 일괄출력</button>
<button type="button" class="btn_down_excel" onclick="excelDownLoad();">엑셀 다운로드</button>
-->
</div> </div>
</div> </div>
<div class="tableWrap">
<table class="tbType1">
<!-- list -->
<div class="list tbType01">
<table>
<colgroup> <colgroup>
<col style="width: 8%"> <col style="width: 8%">
<col style="width: 12%"> <col style="width: 12%">
@ -139,6 +204,7 @@ function logListExcelDownload(){
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
<!--
<th>번호 <input type="button" class="sortBtn sort" id="sort_logId"></th> <th>번호 <input type="button" class="sortBtn sort" id="sort_logId"></th>
<th>메뉴명 <input type="button" class="sortBtn sort" id="sort_menuNm"></th> <th>메뉴명 <input type="button" class="sortBtn sort" id="sort_menuNm"></th>
<th>접근구분 <input type="button" class="sortBtn sort" id="sort_approNm"></th> <th>접근구분 <input type="button" class="sortBtn sort" id="sort_approNm"></th>
@ -147,8 +213,19 @@ function logListExcelDownload(){
<th>접속IP <input type="button" class="sortBtn sort" id="sort_loginIp"></th> <th>접속IP <input type="button" class="sortBtn sort" id="sort_loginIp"></th>
<th>접속URL <input type="button" class="sortBtn sort" id="sort_url"></th> <th>접속URL <input type="button" class="sortBtn sort" id="sort_url"></th>
<th>접속일자 <input type="button" class="sortBtn sort" id="sort_creatDt"></th> <th>접속일자 <input type="button" class="sortBtn sort" id="sort_creatDt"></th>
-->
<th>번호 </th>
<th>메뉴명 </th>
<th>접근구분 </th>
<th>메소드 </th>
<th>접속ID </th>
<th>접속IP </th>
<th>접속URL </th>
<th>접속일자 </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<c:forEach var="result" items="${adminLogList}" varStatus="status"> <c:forEach var="result" items="${adminLogList}" varStatus="status">
<tr> <tr>
@ -175,20 +252,38 @@ function logListExcelDownload(){
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="btnWrap"> <!-- //list -->
<!-- <input type="button" class="btnType2" value="삭제">
<input type="button" class="btnType1" value="등록"> --> <!-- btn_wrap -->
<!--
<div class="btn_wrap btn_layout01">
<div class="area_left">
<button type="button" class="btnType03" onclick="fncDeleteGroupPolicy(); return false;">삭제</button>
</div> </div>
<div class="area_right">
<button type="button" class="btnType02" onclick="fncInsertLoginGroupPolicy(); return false;">등록</button>
</div>
</div>
-->
<!-- //btn_wrap -->
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty adminLogList}"> <c:if test="${!empty adminLogList}">
<div class="page"> <div class="page">
<!-- 페이지 네비게이션 시작 --> <ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" /> <ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
<!-- //페이지 네비게이션 끝 --> </ul>
</div> </div>
</c:if> </c:if>
<!-- //페이지 네비게이션 끝 -->
</div> </div>
</div> </div>
</div>
<!-- //cont -->
</div>
</form> </form>
<!--
<form name="searchForm" method="get" action="<c:url value='/sym/log/clg/SelectLoginLogList.do'/>"> <form name="searchForm" method="get" action="<c:url value='/sym/log/clg/SelectLoginLogList.do'/>">
<input name="pageIndex" type="hidden" value="1" /> <input name="pageIndex" type="hidden" value="1" />
<input name="searchCondition" type="hidden" /> <input name="searchCondition" type="hidden" />
@ -196,5 +291,6 @@ function logListExcelDownload(){
<input name="searchConditionSite" type="hidden" /> <input name="searchConditionSite" type="hidden" />
</form> </form>
<c:import url="/uss/umt/IncInfoProtect.do" /> <c:import url="/uss/umt/IncInfoProtect.do" />
-->
</body> </body>
</html> </html>