자동 Log-off 기능 추가
This commit is contained in:
@@ -30,6 +30,10 @@
|
||||
<script language="javascript" src="<c:url value="/js/jquery.contextMenu.js"/>"></script>
|
||||
<script language="javascript" src="<c:url value="/js/custom.js"/>"></script>
|
||||
<script language="javascript" src="<c:url value="/js/common-${locale}.js"/>"></script>
|
||||
<script type="text/javascript">
|
||||
/* 자동 로그아웃: iframe 내 활동을 sessionStorage에 기록 (main.jsp 타이머와 공유) */
|
||||
(function() { var m = function() { sessionStorage.setItem('lastActivity', String(Date.now())); }; ['mousemove','keydown','click','touchstart'].forEach(function(e){ document.addEventListener(e, m, true); }); })();
|
||||
</script>
|
||||
<script language="javascript" src="<c:url value="/js/jquery.inputmask.bundle.min.js"/>"></script>
|
||||
<script language="javascript" src="<c:url value="/js/jquery.searchabledropdown-1.0.8.min.js"/>"></script>
|
||||
<%-- <script language="javascript" src="<c:url value="/js/jquery.searchable-1.1.0.min.js"/>"></script> --%>
|
||||
|
||||
@@ -99,6 +99,93 @@
|
||||
<iframe class="topMenu" src="" id="topFrame" name="topFrame" scrolling="no" noresize="noresize"></iframe>
|
||||
<iframe class="leftMenu" src="" name="leftFrame" scrolling="no" noresize="noresize"></iframe>
|
||||
<iframe class="rightCon" src="" name="mainFrame" scrolling="auto"></iframe>
|
||||
</body>
|
||||
|
||||
<%-- 자동 로그아웃 경고 모달 --%>
|
||||
<div id="autoLogoutModal" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); z-index:99999;">
|
||||
<div style="position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); background:#fff; padding:30px 40px; border-radius:4px; text-align:center; min-width:320px; box-shadow:0 4px 20px rgba(0,0,0,0.3);">
|
||||
<h3 style="margin:0 0 12px; color:#333; font-size:16px;">자동 로그아웃 안내</h3>
|
||||
<p style="margin:0 0 22px; color:#666; font-size:14px;">
|
||||
장시간 사용하지 않아 <strong><span id="autoLogoutSeconds">60</span>초</strong> 후 자동 로그아웃됩니다.
|
||||
</p>
|
||||
<button id="autoLogoutContinue" style="margin-right:8px; padding:8px 22px; background:#337ab7; color:#fff; border:none; border-radius:3px; cursor:pointer; font-size:13px;">계속 사용</button>
|
||||
<button id="autoLogoutNow" style="padding:8px 22px; background:#d9534f; color:#fff; border:none; border-radius:3px; cursor:pointer; font-size:13px;">로그아웃</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
var IDLE_MS = ${autoLogoutTimeout} * 60 * 1000; // 설정값(분) → ms
|
||||
var WARN_MS = 60 * 1000; // 로그아웃 1분 전 경고
|
||||
var CHECK_INTERVAL = 5000; // 5초 간격 체크
|
||||
var countdownTimer = null;
|
||||
|
||||
/* sessionStorage: iframe 포함 모든 동일-origin 프레임과 공유 */
|
||||
function getLastActivity() {
|
||||
var t = sessionStorage.getItem('lastActivity');
|
||||
return t ? parseInt(t, 10) : Date.now();
|
||||
}
|
||||
function markActivity() {
|
||||
sessionStorage.setItem('lastActivity', String(Date.now()));
|
||||
}
|
||||
|
||||
function resetTimer() {
|
||||
markActivity();
|
||||
if ($('#autoLogoutModal').is(':visible')) {
|
||||
$('#autoLogoutModal').hide();
|
||||
clearInterval(countdownTimer);
|
||||
}
|
||||
}
|
||||
|
||||
function showWarning(remainMs) {
|
||||
var sec = Math.ceil(remainMs / 1000);
|
||||
$('#autoLogoutSeconds').text(sec);
|
||||
$('#autoLogoutModal').show();
|
||||
clearInterval(countdownTimer);
|
||||
countdownTimer = setInterval(function () {
|
||||
sec--;
|
||||
if (sec <= 0) {
|
||||
clearInterval(countdownTimer);
|
||||
doLogout();
|
||||
} else {
|
||||
$('#autoLogoutSeconds').text(sec);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function doLogout() {
|
||||
location.href = '<%=request.getContextPath()%>/rms/logout.do';
|
||||
}
|
||||
|
||||
/* 상위 프레임(main.jsp) 활동 감지 */
|
||||
['mousemove', 'keydown', 'click', 'touchstart'].forEach(function (e) {
|
||||
document.addEventListener(e, markActivity, true);
|
||||
});
|
||||
|
||||
/* 주기적 유휴 시간 체크 */
|
||||
setInterval(function () {
|
||||
var idle = Date.now() - getLastActivity();
|
||||
var remain = IDLE_MS - idle;
|
||||
if (remain <= 0) {
|
||||
clearInterval(countdownTimer);
|
||||
doLogout();
|
||||
} else if (remain <= WARN_MS && !$('#autoLogoutModal').is(':visible')) {
|
||||
showWarning(remain);
|
||||
}
|
||||
}, CHECK_INTERVAL);
|
||||
|
||||
/* 버튼 이벤트 */
|
||||
$(document).on('click', '#autoLogoutContinue', function () {
|
||||
resetTimer();
|
||||
$.get('<%=request.getContextPath()%>/checkSession.do'); // 서버 세션도 갱신
|
||||
});
|
||||
$(document).on('click', '#autoLogoutNow', function () {
|
||||
doLogout();
|
||||
});
|
||||
|
||||
/* 페이지 로드 시 초기화 */
|
||||
markActivity();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user