1

Мне интересно, если ServletResponse.reset() является дополнительным шагом, который мне нужно заблокировать пользователям, не входящим в систему, от доступа к сервлетам, или если есть риски или недостатки.Является ли ServletResponse.reset() жизнеспособным способом блокировать доступ неавторизованных (выведенных из системы) пользователей к сервлетам?

фона:

Путь my website работы, изначально пользователи могут видеть только определенные страницы после того, как они создать учетную запись и войти в систему с этими учетными данными. Первоначально проблема заключалась в том, что, хотя я использовал session.invalidate(), когда пользователь вышел из системы, они могли повторно отправить запрос (например, через кнопку «Назад») и смогли получить доступ к ограниченному содержимому из несанкционированного состояния. Если предположить, что сеанс истек, как указано выше, я не уверен, как это возможно или что можно сделать, чтобы предотвратить его.

Благодаря экспериментам, как решить эту проблему, я попытался ServletResponse.reset(), и что казалось решить ее, но я не понимаю, почему это работает, и, следовательно, я не уверен, что он является надежным жизнеспособным решением.

Мои конкретные вопросы:

  • сбрасывает буфер ответа (включая заголовок и HTTP код статуса) безопасной или рекомендуемой практики, или есть лучший способ сделать это?

  • Как я могу управлять входом в систему с объектом сеанса, а не с использованием файла cookie сеанса?

ответ

0

Я не думаю, что ServletResponse.reset() ничего больно, но это не является стандартной процедурой и не должно быть необходимым. Просто убедитесь, что вы делаете правильные вещи как для недействительности, так и для проверки сеансов.

утратившими силу сессия:

  • Вызов session.invalidate() удалить атрибуты сеанса, присоединенные к сессии, но и быть уверенным, что ваш код явно удаляет его собственные устаревшие ссылки на предыдущее состояние сеанса. куки сессии могут быть явно удалены путем размещения куки с точными критериями соответствия и установление максимального возраста 0.

Проверка сеанса:

  • При аутентификации, вы можете проверить, является ли getSession(false) возвращает нулевое значение, чтобы определить, есть активный сеанс. Если это так, вы можете сделать это недействительным, и вы можете также проверить request.isRequestedSessionIdValid() или явно проверить наличие каких-либо определенных атрибутов, которые вы использовали в своей схеме управления сеансом. Это позволит вам правильно проверить состояние сеанса.

Из JavaDocs:

ServletResponse

        недействительными сброса()

                Очищает любые данные, которые существуют в буфере, а также код состояния и заголовки. Если ответ был                 совершил этот метод бросает IllegalStateException.

        недействительным Invalidate()

                Аннулирует эту сессию, то развязывает любые объекты, связанные с ним.

ServletRequest

        булево isRequestedSessionIdValid()

                проверяет, является ли reques Идентификатор текущей сессии остается в силе.

        HttpSession getSession (булево создания)

                Возвращает текущую HttpSession, связанный с этим запросом, или, если нет текущей сессии и create isправда,
                возвращает новую сессию.Если create isfalse и запрос не имеет действительного HttpSession, этот метод возвращает null.
                Чтобы убедиться, что сессия надлежащим образом, вы должны вызвать этот метод перед ответом привержен.
                использует куки для сохранения целостности сеанса и просят создать новую сессию, когда ответ                 совершил, IllegalStateException отбрасывается.

 Смежные вопросы

  • Нет связанных вопросов^_^