Блокировка запроса сервлета - PullRequest
2 голосов
/ 03 марта 2011

У меня есть фильтр, который сканирует все запросы, проходящие через мое приложение. Я хочу заблокировать запрос, если он запрашивает конкретный URL. Я могу проверить это, и если условие соответствует, я НЕ делаю chain.doFilter, но запрос все равно перемещается на черную страницу. Как я могу заблокировать этот запрос от дальнейшего продвижения и остаться на текущей странице - значит, пользователь не должен видеть никаких изменений на экране, на котором он нажал?

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

HTTP код состояния 204 может работать, но не гарантируется работа со всеми браузерами:

204 Нет содержимого

Сервер выполнил запрос но не нужно возвращать сущность-тело, и может захотеть вернуться обновленная метаинформация. Ответ МОЖЕТ включать новый или обновленный метаинформация в виде заголовки объекта, которые, если присутствуют ДОЛЖЕН быть связан с запрашиваемый вариант.

Если клиент является агентом пользователя, он НЕ СЛЕДУЕТ менять вид документа от того, что вызвало запрос к быть отправлено. Этот ответ в первую очередь предназначен для ввода данных для действий происходить без изменения просмотр активного документа агента пользователя, хотя любой новый или обновленный метаинформация ДОЛЖНА применяться к документ в данный момент у пользователя Активное представление агента.

Ответ 204 НЕ ДОЛЖЕН содержать тело сообщения, и, следовательно, всегда завершается первой пустой строкой после полей заголовка.

(акцент мой)

Кроме того, вы можете попробовать одну из следующих стратегий:

  1. Пусть сервлет вернет 307 (временное перенаправление) на предыдущую страницу, используя поле HTTP Referer. Этот подход может вызвать проблемы с кешами и прокси.
  2. Используйте ajax для загрузки содержимого из вашего сервлета. Вам придется заменить прямые ссылки вызовами JavaScript, которые инициируют вызовы ajax, чтобы заменить часть вашей страницы. URL-адрес в браузере не изменится при такой загрузке содержимого, что может быть нежелательным или нежелательным. Многие сайты используют смесь, в том числе StackOverflow. Все, что должно быть «способным к постоянным ссылкам», перемещается по обычной ссылке, но части каждой страницы лениво выбираются с помощью ajax.

Наконец, что плохого в том, чтобы сообщить пользователю, что ссылка запрещена? Пусть сервлет вернет 403 (запрещено).

1 голос
/ 03 марта 2011

Вы не можете.Браузер уже сделал запрос, и он не в его руках.Возможно, вам удастся взломать что-нибудь, когда вы вернете немного javascript, который молча «нажимает» кнопку «назад» в браузере, но в этом, без сомнения, возникают всевозможные неприятные проблемы.

Но однажды браузерis отправил запрос, текущая страница "мертвая".

...