, Spring-MVC Spring-Security, .
. autologout
.
1. / . , 10 000 .
2. .
3. , .
4. , 30 , , , ( ). , .
1. JSP, .
....
</body>
<jsp:include page="../template/autologout-script.jsp"></jsp:include>
</html>
2. JSP, autologout-script.jsp .
. / .
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<script>
$(document).ready(function()
{
var timeOutTimeInSeconds = ${ timeOutTimeInSeconds };
var showTimerTimeInSeconds= ${ showTimerTimeInSeconds };
var sessionCheckIntervalId = setInterval(redirectToLoginPage, timeOutTimeInSeconds * 1000);
var timerDisplayIntervalId = setInterval(showTimer, (timeOutTimeInSeconds - showTimerTimeInSeconds) * 1000);
var badgeTimerId;
window.localStorage.setItem("AjaxRequestFired", new Date());
function redirectToLoginPage(){
window.location.reload();
}
$(document).ajaxComplete(function () {
resetTimer();
});
$(window).bind('storage', function (e) {
if(e.originalEvent.key == "AjaxRequestFired"){
console.log("Request sent from another tab, hence resetting timer")
resetTimer();
}
});
function resetTimer()
{
showTimerTimeInSeconds= ${ showTimerTimeInSeconds };
console.log("timeOutTimeInSeconds : "+timeOutTimeInSeconds)
window.localStorage.setItem("AjaxRequestFired", new Date());
window.clearInterval(sessionCheckIntervalId);
sessionCheckIntervalId = setInterval(redirectToLoginPage, timeOutTimeInSeconds * 1000);
window.clearInterval(timerDisplayIntervalId);
timerDisplayIntervalId = setInterval(showTimer, (timeOutTimeInSeconds - showTimerTimeInSeconds) * 1000);
hideTimer();
}
function showTimer()
{
$('#sessionTimeRemaining').show();
$('#sessionTimeRemainingBadge').html(showTimerTimeInSeconds--);
window.clearInterval(timerDisplayIntervalId);
badgeTimerId = setInterval(function(){
$('#sessionTimeRemainingBadge').html(showTimerTimeInSeconds--);
}, 1000);
}
function hideTimer()
{
window.clearInterval(badgeTimerId);
$('#sessionTimeRemaining').hide();
}
});
</script>
3.
. . sessionCreated HttpSessionListener .
session.setMaxInactiveInterval(300);
session.setAttribute("timeOutTimeInSeconds", 300);
session.setAttribute("showTimerTimeInSeconds", 30);
4. HTML .
: , CSS. , .
CSS.
<span class="badge badge-primary" title="click to keep session alive" id="sessionTimeRemaining"
onclick="ajaxSessionRefresh()" style="display:none;">
<i class="badge badge-danger" id="sessionTimeRemainingBadge" style="float:left">30</i>
<small>Refresh</small>
<i class="glyphicon glyphicon-refresh"></i>
</span>

.
github
Autologout
Autologout Java Spring-Security
Autologout Spring-Security XML
1:, maxInactiveInterval. - .
2: AJAX, AJAX, .ajaxStart() .ajaxComplete() jquery, ajax .
3: /Intertab . localStorage .
/
1. , , AJAX . , .
2. ajaxStart() ajaxComplete() idleTime .
1. Jquery
1.
http. ( AJAX)
response.setHeader("Refresh", "60; URL=login.jsp");
- meta meta HTML ( AJAX)
<meta http-equiv="refresh" content="60; url=login.jsp">
- AJAX. -.
, . .- , 2 50 000 . 100 000 .
- , , , , . ( )
- Force Logout Approach This client dominates the server to terminate the session.