Ответ 1
Чтобы убить текущий сеанс, вам в основном нужно вызвать HttpSession#invalidate()
и выполнить перенаправление на логин или главную страницу. Этот код должен быть помещен в метод doPost()
servlet, который вызывается запросом POST.
например.
<form action="${pageContext.request.contextPath}/logout" method="post">
<input type="submit" value="Logout" />
</form>
с
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/LoginPage.html");
}
}
Несвязанный к конкретной проблеме, ваш код проверки имени пользователя не в нужном месте. Вы не должны копировать один и тот же код на каждую страницу JSP. Вы должны выполнять эту работу в одном месте в сервлет-фильтре. Java-код в JSP файлах должен избегать как можно больше.
Кроме того, существует еще одна потенциальная проблема, когда конечный пользователь использует кнопку назад для перехода назад в историю. По умолчанию браузер будет кэшировать все ответы, и, таким образом, кнопка "Назад" может отображать страницу из кеша браузера, а не запрашивать совершенно новое прямо с сервера. Чтобы исправить это, см. Этот связанный вопрос Предотвратить доступ пользователя к ранее посещаемой защищенной странице после выхода из системы
И последнее, но не менее важное: у вас есть довольно странный HTML. Кнопки с onClick
для навигации? Как пользователь и SEO недружелюбны. Вместо этого используйте обычные <a>
ссылки. Для кнопки look'n'feel, введите CSS.