로그인후 만료시간까지의 남은 시간을 표시한다.
세션에 객체 정보 저장, 취득, 제거의 기능을 갖으며 HttpServletRequest 객체의 HttpSession 정보를 사용하여 처리된다.
유형 | 대상소스 | 설명 | 비고 |
---|---|---|---|
Filter | egovframework.com.cmm.filter.SessionTimeoutCookieFilter.java | 시간관리 필터 | |
Controller | egovframework.com.cmm.web.EgovComIndexController.java | 상단프레임 Controller | 시간관리 표시 |
JSP | /WEB-INF/jsp/egovframework/com/cmm/EgovUnitTop.jsp | 상단프레임 페이지 | 시간관리 표시 |
쿠키명 | 변수타입 | 설명 | 내용 |
---|---|---|---|
egovLatestServerTime | long | 서버의 최근 시간 | 시스템의 최근 시간을 밀리초 단위의 Epoch시간(Unix time, POSIX time)으로 기록한다. |
egovExpireSessionTime | long | 세션 객체 생성 | HttpSession에서 만료 시간을 밀리초 단위의 Epoch시간(Unix time, POSIX time)으로 기록한다. |
세션 만료 시간을 적절하게 설정하여야 한다.
너무 짧으면 사용시 불편을 초래할수 있고, 너무 길면 보안상 좋지 않으며 서버에 세션정보가 누적되어 성능저하나 오동작을 유발할수 있다.
서버의 세션타임아웃 시간을 설정한다. 분 단위는 기재한다. ex) 60 = 1시간 , 600 = 10시간
<session-config> <session-timeout>60</session-timeout> </session-config>
EgovWebApplicationInitializer.java 파일에 다음 코드를 추가하여 Filter를 설정한다.
import egovframework.com.cmm.filter.SessionTimeoutCookieFilter; public class EgovWebApplicationInitializer implements WebApplicationInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(EgovWebApplicationInitializer.class); @Override public void onStartup(ServletContext servletContext) throws ServletException { .... 중략 .... FilterRegistration.Dynamic sessionTimeoutFilter = servletContext.addFilter("sessionTimeoutFilter", new SessionTimeoutCookieFilter()); sessionTimeoutFilter.addMappingForUrlPatterns(null, false, "*.do"); .... 중략 ....
쿠키로부터 만료 예정시간(egovLatestServerTime), 서버현재시간(egovExpireSessionTime)을 구하여 그 차이를 계산하여 로그인 남은 시간을 표시한다.
<script type="text/javaScript"> var objLeftTime; var objClickInfo; var latestTime; var expireTime; var timeInterval = 1000; // 1초 간격 호출 var firstLocalTime = 0; var elapsedLocalTime = 0; var stateExpiredTime = false; var logoutUrl = "<c:url value='/uat/uia/actionLogout.do'/>"; var timer; function init() { objLeftTime = document.getElementById("leftTimeInfo"); if (objLeftTime == null) { console.log("'leftTimeInfo' ID is not exist!"); return; } objClickInfo = document.getElementById("clickInfo"); //console.log(objLeftTime.textContent); latestTime = getCookie("egovLatestServerTime"); expireTime = getCookie("egovExpireSessionTime"); //console.log("latestServerTime = "+latestTime); //console.log("expireSessionTime = "+expireTime); elapsedTime = 0; firstLocalTime = (new Date()).getTime(); showRemaining(); timer = setInterval(showRemaining, timeInterval); // 1초 간격 호출 }