Я бы добавил свой собственный фильтр непосредственно перед «CONCURRENT_SESSION_FILTER» и проверил бы в URI запроса строку типа «force-logout.do» (или что-то подобное).
Тогда в сгенерированном HTML-файле у меня будет обработчик событий JavaScript, подобный следующему:
<script type="text/javascript">
function force_logout() {
// AJAX request to server notifying that the browser has been closed.
}
</script>
<body onbeforeunload="force_logout();">
</body>
Это будет работать для IE и Firefox (вы должны проверить и другие браузеры). Вашему фильтру просто нужно проверить URI и выполнить session.invalidate()
в случае, если он соответствует «URI принудительного выхода из системы» и немедленно вернуться или просто пропустить запрос к цепочке фильтров.
ПРИМЕЧАНИЕ. Я не добавляю код AJAX, поскольку не знаю, используете ли вы конкретную среду AJAX. С prototype.js это было бы довольно просто.