У меня есть требование, чтобы конечный пользователь не мог вернуться на страницу с ограниченным доступом после выхода / выхода. Но в настоящее время конечный пользователь может сделать это, нажав кнопку «Назад» в браузере, посетив историю браузера или даже повторно введя URL-адрес в адресной строке браузера.
По сути, я хочу, чтобы конечный пользователь не мог каким-либо образом получить доступ к странице с ограниченным доступом после выхода. Как я могу добиться этого наилучшим образом? Могу ли я отключить кнопку возврата с помощью JavaScript?
Ответы:
Вы можете и не должны отключать в браузере кнопку «Назад» или историю. Это плохо для пользовательского опыта. Есть хаки JavaScript, но они ненадежны и не будут работать, когда у клиента отключен JS.
Ваша конкретная проблема заключается в том, что запрошенная страница загружается из кеша браузера, а не прямо с сервера. Это по сути безвредно, но действительно сбивает с толку конечного пользователя, потому что он / она ошибочно думает, что это действительно исходит от сервера.
Вам просто нужно указать браузеру не кэшировать все ограниченные страницы JSP (и, следовательно, не только страницу / действие выхода из системы!). Таким образом, браузер вынужден запрашивать страницу с сервера, а не из кеша, и, следовательно, все проверки входа на сервер будут выполнены. Вы можете сделать это с помощью фильтра, который устанавливает необходимые заголовки ответа в
doFilter()
методе:Например, сопоставьте это
Filter
сurl-pattern
интересующим*.jsp
.Или, если вы хотите наложить это ограничение только на защищенные страницы, вы должны указать шаблон URL, который охватывает все эти защищенные страницы. Например, когда все они находятся в папке
/app
, вам нужно указать шаблон URL-адреса/app/*
.Более того, вы можете выполнять эту работу в том же
Filter
где вы проверяете присутствие вошедшего в систему пользователя.Не забудьте очистить кеш браузера перед тестированием! ;)
Смотрите также:
источник
doFilter()
метод. Когда я нажимаю кнопку выхода, он перенаправляется на сервлет, где я аннулирую сеанс. Я не уверен, как этотdoFilter()
метод здесь задействован. Подскажите, пожалуйста, как это реализовать? Как в, правильные шаги, которым нужно следовать. Спасибо.sendRedirect(...)
иforward()
.* .jsp в шаблоне URL не будет работать, если вы пересылаете страницу. Попробуйте также включить свой сервлет ... это защитит ваше приложение от этой проблемы с кнопкой возврата.
источник
Самый простой способ сделать это, не отключая браузер, - это добавить этот код в
page_load
событие для страницы, на которую вы не хотите, чтобы пользователь возвращался после выхода из системы:источник
Вы можете попробовать запретить браузеру кэшировать домашнюю страницу (используя соответствующие заголовки - Expires, Cache-Control, Pragma). Но это не гарантирует работу. Что вы можете сделать, так это сделать ajax-вызов серверу при загрузке страницы, чтобы проверить, вошел ли пользователь в систему, а если нет - перенаправить.
источник
Правильный способ сделать это - добавить
заголовок на защищенных страницах. Когда пользователь выйдет из системы, очистите файл cookie сеанса. Затем, когда они вернутся после выхода из системы, кеш браузера будет отсутствовать. Это также имеет то преимущество, что не полностью устраняет кеширование.
источник