Merge branch 'tolag3'

This commit is contained in:
leejunho 2024-10-07 12:47:12 +09:00
commit 4f5d92adf7
9 changed files with 228 additions and 111 deletions

View File

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

View File

@ -2187,7 +2187,7 @@
<bean name="AdminLogStrategy" <bean name="AdminLogStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl"> class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="ADMINLOG_" /> <property name="prefix" value="ADMINLOG_" />
<property name="cipers" value="16" /> <property name="cipers" value="11" />
<property name="fillChar" value="0" /> <property name="fillChar" value="0" />
</bean> </bean>
@ -2205,7 +2205,7 @@
<bean name="FmsFileStrategy" <bean name="FmsFileStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl"> class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="FMSID_" /> <property name="prefix" value="FMSID_" />
<property name="cipers" value="10" /> <property name="cipers" value="14" />
<property name="fillChar" value="0" /> <property name="fillChar" value="0" />
</bean> </bean>
@ -2235,7 +2235,7 @@
<bean name="ComIpStrategy" <bean name="ComIpStrategy"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl"> class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="COMIP_" /> <property name="prefix" value="COMIP_" />
<property name="cipers" value="10" /> <property name="cipers" value="14" />
<property name="fillChar" value="0" /> <property name="fillChar" value="0" />
</bean> </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# ,#deviceType#
</isNotEmpty> </isNotEmpty>
, ,
( SELECT A.PROGRM_FILE_NM FROM LETTNPROGRMLIST A WHERE 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 B.MENU_NM FROM LETTNPROGRMLIST A INNER JOIN LETTNMENUINFO B 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 )]]>
WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM AND A.URL = #url# LIMIT 1 )
, SYSDATE) , SYSDATE)
</insert> </insert>
@ -605,16 +604,35 @@
<!-- 이전 관리자 로그인 로그 상세 조회 --> <!-- 이전 관리자 로그인 로그 상세 조회 -->
<select id="LoginLogDAO.selectBeforeAmdinLog" parameterClass="loginLog" resultClass="loginLog"> <select id="LoginLogDAO.selectBeforeAmdinLog" parameterClass="loginLog" resultClass="loginLog">
/* 임시.*NOT_SQL_LOG.* LoginLogDAO.selectBeforeAmdinLog */ SELECT
/* COALESCE(TO_CHAR(A.CREAT_DT, 'YYYY-MM-DD HH24:MI'), TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI')) AS CREATDT
SELECT DATE_FORMAT(A.CREAT_DT, '%Y-%m-%d %H:%i' ) creatDt FROM LETTNADMINLOG A 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
*/ UNION ALL
SELECT TO_CHAR(A.CREAT_DT, 'YYYY-MM-DD HH24:MI' ) creatDt FROM LETTNADMINLOG A
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# WHERE A.CONECT_ID = #conectId#
AND A.PROGRM_FILE_NM = 'selectActionSecurityLogin' AND A.PROGRM_FILE_NM = 'selectActionSecurityLogin'
ORDER BY A.CREAT_DT DESC )
LIMIT 1
</select> </select>

View File

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

View File

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

View File

@ -52,26 +52,6 @@ function sessionExpend(){
}); });
SetTime = 60*${sessionTime}; 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) { function fn_change_dept(val) {
var param = {changeDept:val}; var param = {changeDept:val};
@ -146,8 +126,68 @@ function TopnavXHR(url, data, callbackFunc, exceptionFunc , localStartFunc , loc
}); });
} }
</script> </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_info">
<div class="user"> <div class="user">
<i></i> <i></i>
@ -171,8 +211,7 @@ function TopnavXHR(url, data, callbackFunc, exceptionFunc , localStartFunc , loc
<p>로그인 타임아웃 : </p><span id="ViewTimer"></span> <p>로그인 타임아웃 : </p><span id="ViewTimer"></span>
</li> </li>
</ul> </ul>
</div> </div> --%>
<!-- //top_utill -->