Как узнать, был ли запрос на сервлет выполнен с использованием HTTP или HTTPS?
Я написал сервлет в Java, и я хотел бы знать, был ли запрос на этот сервлет выполнен с использованием HTTP или HTTPS.
Я думал, что могу использовать request.getProtocol(), но он возвращает HTTP/1.1 для обоих методов.
Любые идеи?
Ответ 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
Вы не можете надежно зависеть от номеров портов.
Но вы можете зависеть от схемы:
Я считаю, что это должно работать независимо от версии Tomcat
Ответ 3
isSecure. Обязательно проверьте унаследованные методы.
Ответ 4
https и http работает на разных портах. Таким образом, вы можете получить порт из запроса и узнать, из какого порта пришел запрос, и чтобы вы знали протокол. int port = request.getServerPort();