Вам не нужно делать это вручную.Сервлетконтейнер сделает это за вас.Вы можете получить доступ к отслеживаемой сессии с помощью HttpServletRequest#getSession()
.Все, что вам нужно сделать, это поместить зарегистрированного пользователя в качестве атрибута сеанса.
request.getSession().setAttribute("user", user);
Пусть остальная часть вашего кода перехватит это.Для этого обычно используется Filter
.
if (request.getSession().getAttribute("user") == null) {
// Not logged in. Redirect to login page.
response.sendRedirect("login.jsp");
} else {
// Logged in. Just continue request.
chain.doFilter(request, response);
}
Когда вы вызываете выход из системы, просто удалите пользователя из сеанса.
request.getSession().removeAttribute("user");
Сервлет-контейнер будет управлять окончанием сеанса какЧто ж.По истечении этого срока HttpSession
будет просто уничтожен, включая все его атрибуты.
Что касается вопроса о кнопке «Назад», просто проинструктируйте клиента не кэшировать ответ, чтобы он был вынужден запустить брендновый запрос, который затем будет передан через Filter
.Эта инструкция клиента должна выполняться путем установки соответствующих заголовков ответа.Это можно сделать и за Filter
.
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.