Подтвердить что ты не робот

Как узнать, был ли запрос на сервлет выполнен с использованием HTTP или HTTPS?

Я написал сервлет в Java, и я хотел бы знать, был ли запрос на этот сервлет выполнен с использованием HTTP или HTTPS.

Я думал, что могу использовать request.getProtocol(), но он возвращает HTTP/1.1 для обоих методов.

Любые идеи?

4b9b3361

Ответ 1

HttpSerlvetRequest.isSecure() - это ответ. ServletContainer отвечает за возвращение true в следующих случаях:

  • Если ServletContainer сам может принимать запросы на https.
  • Если перед ServletContainer установлен LoadBalancer. И LoadBlancer получил запрос на https и отправил его в ServletContainer на простой http. В этом случае LoadBalancer отправляет заголовок X-SSL-Secure: true в ServletContainer, который должен выполняться.

Контейнер также должен сделать эти атрибуты запроса доступными, когда запрос получен в https:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate

Ответ 2

Вы не можете надежно зависеть от номеров портов.
Но вы можете зависеть от схемы:

Используйте request.getScheme(), чтобы узнать, есть ли https.

Если это тогда, это безопасное соединение.

Я считаю, что это должно работать независимо от версии Tomcat

Ответ 3

isSecure. Обязательно проверьте унаследованные методы.

Ответ 4

https и http работает на разных портах. Таким образом, вы можете получить порт из запроса и узнать, из какого порта пришел запрос, и чтобы вы знали протокол.   int port = request.getServerPort();