관리자 수정중

This commit is contained in:
leejunho 2024-10-07 12:46:55 +09:00
parent dac738b7e1
commit 88bc1057dc
9 changed files with 228 additions and 111 deletions

View File

@ -16,7 +16,9 @@
package kcc.com.cmm.util;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
@ -111,4 +113,37 @@ public class IpUtil {
return ozServerNm;
}
public static String getClientIPv4(HttpServletRequest request) {
String userip = request.getHeader("X-Forwarded-For"); // 아파치 아래에 웹로직이 있을경우 아이피 가져오기
if (userip == null || "".equals(userip)) { // 아이피 가져오기 , 바로 웹로직이 있을경우
userip = request.getRemoteAddr();
}
if (userip == null || "".equals(userip)) {
return "";
}
// 여러 IP가 있을 경우 번째 IP 사용
String[] userips = userip.split(",");
userip = userips[0].trim();
// IPv6 주소인 경우 IPv4로 변환 시도
try {
InetAddress inetAddress = InetAddress.getByName(userip);
if (inetAddress instanceof java.net.Inet6Address) {
byte[] ipv4Bytes = new byte[4];
System.arraycopy(inetAddress.getAddress(), 12, ipv4Bytes, 0, 4);
InetAddress ipv4Address = InetAddress.getByAddress(ipv4Bytes);
return ipv4Address.getHostAddress();
}
} catch (UnknownHostException e) {
e.printStackTrace(); // 예외 발생 로그 출력
}
// IPv4 주소라면 그대로 반환
return userip;
}
}

View File

@ -39,6 +39,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import kcc.com.cmm.ComDefaultVO;
import kcc.com.cmm.LoginVO;
import kcc.com.cmm.util.IpUtil;
import kcc.com.cmm.util.RedirectUrlMaker;
import kcc.com.uss.ion.bnr.service.BannerVO;
import kcc.com.uss.ion.bnr.service.EgovBannerService;
@ -197,14 +198,14 @@ public class EgovMainController {
// model.addAttribute("uniqId", user.getUniqId());
//이전접속정보
// LoginLog loginLog = new LoginLog();
// loginLog.setConectId(user.getUniqId());
// loginLog = loginLogService.selectBeforeAmdinLog(loginLog); //이전접속 시간
// if(loginLog !=null) {
// model.addAttribute("beforeLoginDate", loginLog.getCreatDt());
// }else {
// model.addAttribute("beforeLoginDate", "");
// }
LoginLog loginLog = new LoginLog();
loginLog.setConectId(user.getUniqId());
loginLog = loginLogService.selectBeforeAmdinLog(loginLog); //이전접속 시간
if(loginLog !=null) {
model.addAttribute("beforeLoginDate", loginLog.getCreatDt());
}else {
model.addAttribute("beforeLoginDate", "");
}
}else{
//model.addAttribute("list_headmenu", menuManageService.selectMainMenuHeadAnonymous(menuManageVO));
//model.addAttribute("list_menulist", menuManageService.selectMainMenuLeftAnonymous(menuManageVO));
@ -246,6 +247,8 @@ public class EgovMainController {
model.addAttribute("memDept", memberDept);
model.addAttribute("enaDept", memberJoinService.deptList(commandMap));
model.addAttribute("IP", IpUtil.getClientIPv4(req));
return "main/inc/EgovIncTopnav"; // 내부업무의 상단메뉴 화면
}
@ -526,26 +529,26 @@ public class EgovMainController {
@RequestParam Map<String, Object> commandMap ,ModelMap model)
throws Exception {
// SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
// Date currentTime = new Date ();
// String mTime = mSimpleDateFormat.format ( currentTime );
// HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
// String ip = req.getHeader("X-FORWARDED-FOR");
// if (ip == null){ ip = req.getRemoteAddr();}
// LoginLog loginLog = new LoginLog();
// loginLog.setLoginIp(ip);
// loginLog.setCreatDt(mTime);
// loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
// loginLog.setErrOccrrAt("N");
// loginLog.setErrorCode("");
// loginLog.setUserAt("A"); //관리자
// loginLog.setLoginId(""); //connnect_id
// loginLog.setUrl(req.getRequestURI());
// if(EgovUserDetailsHelper.isAuthenticated()){
// LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// loginLog.setLoginId(user.getUniqId());
// }
//loginLogService.logInsertAdminLoginLog(loginLog);
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String ip = req.getHeader("X-FORWARDED-FOR");
if (ip == null){ ip = req.getRemoteAddr();}
LoginLog loginLog = new LoginLog();
loginLog.setLoginIp(ip);
loginLog.setCreatDt(mTime);
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
loginLog.setUserAt("A"); //관리자
loginLog.setLoginId(""); //connnect_id
loginLog.setUrl(req.getRequestURI());
if(EgovUserDetailsHelper.isAuthenticated()){
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
loginLog.setLoginId(user.getUniqId());
}
loginLogService.logInsertAdminLoginLog(loginLog);
return "main/inc/EgovIncFooter"; // 내부업무의 상단메뉴 화면
}

View File

@ -2187,7 +2187,7 @@
<bean name="AdminLogStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="ADMINLOG_" />
<property name="cipers" value="16" />
<property name="cipers" value="11" />
<property name="fillChar" value="0" />
</bean>
@ -2205,7 +2205,7 @@
<bean name="FmsFileStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="FMSID_" />
<property name="cipers" value="10" />
<property name="cipers" value="14" />
<property name="fillChar" value="0" />
</bean>
@ -2235,7 +2235,7 @@
<bean name="ComIpStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="COMIP_" />
<property name="cipers" value="10" />
<property name="cipers" value="14" />
<property name="fillChar" value="0" />
</bean>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/let/sym/log/clg/EgovLoginLog_SQL_Oracle.xml"/>
</sqlMapConfig>

View File

@ -226,10 +226,9 @@
,#deviceType#
</isNotEmpty>
,
( SELECT A.PROGRM_FILE_NM FROM LETTNPROGRMLIST A WHERE A.URL = #url# LIMIT 1 )
,(
SELECT B.MENU_NM FROM LETTNPROGRMLIST A INNER JOIN LETTNMENUINFO B
WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM AND A.URL = #url# LIMIT 1 )
<![CDATA[( SELECT NVL(A.PROGRM_FILE_NM, #url#) FROM LETTNPROGRMLIST A WHERE A.URL = #url# and rownum <= 1 )]]>
,<![CDATA[(
SELECT NVL(B.MENU_NM, #url#) FROM LETTNPROGRMLIST A INNER JOIN LETTNMENUINFO B ON A.PROGRM_FILE_NM = B.PROGRM_FILE_NM WHERE A.URL = #url# and rownum <= 1 )]]>
, SYSDATE)
</insert>
@ -605,16 +604,35 @@
<!-- 이전 관리자 로그인 로그 상세 조회 -->
<select id="LoginLogDAO.selectBeforeAmdinLog" parameterClass="loginLog" resultClass="loginLog">
/* 임시.*NOT_SQL_LOG.* LoginLogDAO.selectBeforeAmdinLog */
/*
SELECT DATE_FORMAT(A.CREAT_DT, '%Y-%m-%d %H:%i' ) creatDt FROM LETTNADMINLOG A
SELECT
COALESCE(TO_CHAR(A.CREAT_DT, 'YYYY-MM-DD HH24:MI'), TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI')) AS CREATDT
FROM
(SELECT
A.CREAT_DT
FROM
LETTNADMINLOG A
WHERE
A.CONECT_ID = #conectId#
AND A.PROGRM_FILE_NM = 'selectActionSecurityLogin'
ORDER BY
A.CREAT_DT DESC) A
WHERE
ROWNUM = 1
*/
SELECT TO_CHAR(A.CREAT_DT, 'YYYY-MM-DD HH24:MI' ) creatDt FROM LETTNADMINLOG A
UNION ALL
SELECT
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI') AS CREATDT
FROM
DUAL
WHERE
NOT EXISTS (
SELECT 1
FROM LETTNADMINLOG A
WHERE A.CONECT_ID = #conectId#
AND A.PROGRM_FILE_NM = 'selectActionSecurityLogin'
ORDER BY A.CREAT_DT DESC
LIMIT 1
)
</select>

View File

@ -2,24 +2,40 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<!DOCTYPE html>
<html lang="kr">
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<%-- 전자조정 --%>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>관리자페이지</title>
<!-- 분쟁조정 -->
<!-- css -->
<link rel="stylesheet" href="/kofair_case_seed/css/reset.css">
<link rel="stylesheet" href="/kofair_case_seed/css/font.css">
<link rel="stylesheet" href="/kofair_case_seed/adm/style/layout.css">
<link rel="stylesheet" href="/kofair_case_seed/adm/style/common.css">
<!-- script -->
<script src="/kofair_case_seed/script/lib/jquery-3.5.0.js"></script>
<script src="/kofair_case_seed/adm/scripts/common.js"></script>
<script src="/kofair_case_seed/adm/scripts/layout.js"></script>
<!-- 분쟁조정 끝 -->
<!-- css -->
<link rel="stylesheet" href="/kccadrPb/adm/css/reset.css">
<link rel="stylesheet" href="/kccadrPb/adm/css/font.css">
<link rel="stylesheet" href="/kccadrPb/adm/css/common.css">
<!-- <link rel="stylesheet" href="/kccadrPb/adm/css/reset.css"> -->
<!-- <link rel="stylesheet" href="/kccadrPb/adm/css/font.css"> -->
<!-- <link rel="stylesheet" href="/kccadrPb/adm/css/common.css"> -->
<link rel="stylesheet" href="/kccadrPb/adm/css/content.css">
<link rel="stylesheet" href="/kccadrPb/adm/css/content_media.css">
<!-- script -->
<script src="/kccadrPb/adm/script/jquery-3.5.0.js"></script>
<script src="/kccadrPb/adm/script/common.js"></script>
<!-- <script src="/kccadrPb/adm/script/jquery-3.5.0.js"></script> -->
<!-- <script src="/kccadrPb/adm/script/common.js"></script> -->
<script src="/kccadrPb/adm/script/content.js"></script>
<script src="<c:url value='/js/ncms_common.js' />"></script><%-- 전자조정 --%>
@ -34,18 +50,16 @@
</script>
</head>
<%-- 전자조정 --%>
<decorator:head />
<c:import url="/EgovPageLink.do?link=blank" />
<div class="wrap">
<%-- <c:import url="/EgovPageLink.do?link=blank" /> --%>
<body>
<div class="wrap">
<c:import url="/sym/mms/EgovMainMenuLeft.do" />
<!-- top_utill+cont -->
<div class="area_right">
<div class="contents">
<c:import url="/sym/mms/EgovMainMenuHead.do" />
<decorator:body />
</div>
<!-- //top_utill+cont -->
</div>
<c:import url="/sym/mms/EgovMainFooter.do" />
</div>
<c:import url="/sym/mms/EgovMainFooter.do" />
</body>
</html>

View File

@ -40,30 +40,31 @@ $( document).ready(function() {
location.href = "/EgovTopPageLink.do?link="+baseMenuUrl+"&baseMenuNo="+base;
}
</script>
<!-- leftmenu -->
<div class="area_left">
<h1 class="logo">
<a href="/cmm/main/mainPage.do">
<!-- <img src="/kccadrPb/adm/image/common/logo.png" alt="한국저작권위원회 KOREA COPYRIGHT COMMISSION"> -->
</a>
</h1>
<div class="leftmenu">
<h1 class="logo"><a href="/cmm/main/mainPage.do"><img src="/kofair_case_seed/adm/images/layout/logo.png" alt="FAIR 한국공정거래조정원 분쟁조정사건처리시스템"></a></h1>
<nav class="menu">
<ul>
<ul class="menu_ul">
<c:forEach var="result" items="${list_headmenu}" varStatus="status">
<li class="depth01">
<button class="menu_tit" title="하위메뉴 열기">
<li class="depth01_li">
<!-- depth01 -->
<button type="button" class="menu_title">
<i class="icon menu_icon site"></i>
<c:out value="${result.menuNm}" />
</button>
<ul class="depth02">
<!-- //depth01 -->
<!-- depth02 -->
<ul class="depth02_ul">
<c:forEach var="resultSub" items="${list_menulist}" varStatus="statusSub">
<c:if test="${result.menuNo eq resultSub.upperMenuId}">
<li id="top_href_${resultSub.menuNo}" value='${resultSub.menuNm}'
onclick="javascript:goMenuPage('<c:out value="${resultSub.menuNo}"/>', '${resultSub.chkURL}')">
<a href="#"><c:out value="${resultSub.menuNm}" /></a>
<li class="depth02_li" id="top_href_${resultSub.menuNo}" value='${resultSub.menuNm}' onclick="javascript:goMenuPage('<c:out value="${resultSub.menuNo}"/>', '${resultSub.chkURL}')">
<a href="#none"><c:out value="${resultSub.menuNm}" /></a>
</li>
</c:if>
</c:forEach>
</ul>
<!-- //depth02 -->
</li>
</c:forEach>
</ul>

View File

@ -52,26 +52,6 @@ function sessionExpend(){
});
SetTime = 60*${sessionTime};
}
function modifyMem(uniqId){
var form = document.createElement("form");
// form.setAttribute("charset", "UTF-8");
form.setAttribute("method", "get"); //get 방식
form.setAttribute("action", "/uss/umt/user/EgovUserSelectUpdtView.do"); //요청 보낼 주소
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "selectedId");
hiddenField.setAttribute("value", uniqId);
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
}
function fn_change_dept(val) {
var param = {changeDept:val};
@ -146,8 +126,68 @@ function TopnavXHR(url, data, callbackFunc, exceptionFunc , localStartFunc , loc
});
}
</script>
<!-- top_utill -->
<div class="top_util">
<!-- user_info -->
<div class="user_info">
<ul class="user_util_ul">
<li>
<i class="icon time"></i>
<!-- 최종접속일시 : 2024-07-08 14:51 -->
최종접속일시 : <c:out value="${beforeLoginDate}"/>
</li>
<li>
<i class="icon ip"></i>
IP : <c:out value="${IP}"/>
</li>
<li>
<i class="icon timeout"></i>
로그인 타임아웃 : <span class="color_orange fw_bold" id="ViewTimer"></span>
<button type="button" class="btn btn_text orange_border light_orange_fill btn_extension" onclick="sessionExpend(); return false;">
연장
</button>
</li>
</ul>
<div class="area_right">
<ul class="user_info_ul">
<li>
<select onchange="fn_change_dept(this.value)">
<c:forEach var="ed" items="${enaDept}" varStatus="stss">
<option value="${ed.CODE_IDXS}" <c:if test="${ed.CODE_IDXS eq memDept}">selected="selected"</c:if>>${ed.CODE_NAME}</option>
</c:forEach>
</select>
</li>
<li>
<i class="icon user"></i>
<c:out value="${LoginVO.name}" />
(<c:out value="${LoginVO.id}" />)
</li>
</ul>
<button type="button" class="btn btn_text gray_fill btn_logout" onclick="location.href='/uat/uia/actionLogout.do'">로그아웃</button>
</div>
</div>
<!-- //user_info -->
<%-- <div class="top_util">
<div class="user_info">
<div class="user">
<i></i>
@ -171,8 +211,7 @@ function TopnavXHR(url, data, callbackFunc, exceptionFunc , localStartFunc , loc
<p>로그인 타임아웃 : </p><span id="ViewTimer"></span>
</li>
</ul>
</div>
<!-- //top_utill -->
</div> --%>