#java #jsp
Вопрос:
У меня есть 4 файла jsp, логин.индекс jsp.представление jsp.выход из системы jsp.jsp.
При входе в систему я создаю сеанс и передаю имя пользователя и пароль пользователя.
Я позволяю ему просматривать индекс и просмотр, и у меня есть простая кнопка на панели навигации для выхода из системы.
выход из системы.jsp:
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Logout Page</title>
</head>
<body>
<h1>You have logged out of the system!</h1>
<a href="login.jsp">Back to the Login Page</a>
<%
session.invalidate(); // destroy session
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
%>
</body>
</html>
Во всех моих .jsp
файлах у меня есть следующие строки в начале:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
Но если пользователь находится на logout.jsp
веб-странице, он может просто нажать кнопку «Назад» браузера и вернуться на предыдущую страницу (либо index.jsp, либо view.jsp).
Однако это правильно разрушает сеанс, но я не хочу, чтобы он мог вернуться.
Ответ №1:
В этом вопросе нужно многое осветить, поэтому я постараюсь быть кратким.
Во — первых, вы должны иметь в виду следующее:
- HTTP-это протокол без состояния
- Код Java выполняется на сервере при отправке HTTP-запроса
- Выходные данные вашего процесса Java отправляются в ваш браузер в виде HTML, или JSON, или какого-либо другого текста в HTTP-ответе (который также содержит заголовки HTTP-ответа).
- Если вы изменяете HTTP-ответ в Java JSP, он будет выполнен на сервере, и вы увидите результаты в ответе. (вот почему сеанс признан недействительным, и вы увидите, как заголовки исчезнут)
- К сожалению, вашему браузеру все равно, что делает Java-код, и когда вы нажмете кнопку «Назад», вы отправите новый HTTP-запрос на предыдущий ресурс JSP, который вы запрашивали.
Вы можете проверить HTTP-ЗАПРОС, чтобы убедиться, что вы не добавляете заголовки, которые могли бы восстановить сеанс и/или аутентифицировать вашего пользователя.
Другим классическим решением проблемы такого рода было бы использование так называемого шаблона проектирования MVC (Model-View-Controller) и выполнение аутентификации и управления сеансами в компонентах(компонентах) контроллера. При таком подходе ваши файлы JSP являются частью компонента ПРЕДСТАВЛЕНИЯ, и вы можете легко делегировать определенные методы контроллера определенным представлениям. Для этого на Java существует множество ресурсов. Вот простое руководство по использованию JSP и сервлетов:
Независимо от используемого вами подхода к кодированию, каждый компонент, обрабатывающий входящий HTTP-запрос, должен проверить его, чтобы убедиться, что текущий пользователь аутентифицирован. Если нет, то отобразите страницу входа в систему. Это проще сделать в компоненте управления, но вы также можете сделать это в JSP, хотя вам может потребоваться импортировать другой JSP для проверки подлинности, чтобы не копировать один и тот же код в несколько файлов.