Как я могу узнать, был ли запрос к сервлету выполнен с использованием HTTP или HTTPS?
Я написал сервлет на Java, и я хотел бы знать, был ли запрос к этому сервлету выполнен с использованием HTTP или HTTPS.
Я думал, что могу использовать request.getProtocol()
но он возвращает HTTP / 1.1 на обоих методах.
какие идеи?
4 ответа:
HttpSerlvetRequest.isSecure() ответ. ServletContainer отвечает за возврат true в следующих случаях:
- если ServletContainer может сам принимать запросы на HTTPS.
- если есть LoadBalancer перед ServletContainer. И, LoadBlancer получил запрос на https и отправил то же самое в ServletContainer на обычный http. В этом случае Балансировщик нагрузки направляет X-SSL-Secure: true заголовок к ServletContainer, который должен быть соблюден.
контейнер также должен сделать эти атрибуты запроса доступными, когда запрос получен на https:
- javax.сервлет.http.sslsessionid
- javax.сервлет.запрос.key_size
- javax.сервлет.запрос.X509Certificate
вы не можете надежно зависеть от номеров портов.
Но вы можете зависеть от схемы:использование: запрос.getScheme() чтобы увидеть, если это
https
.Если это так, то это безопасное соединение.
Я считаю, что это должно работать независимо от версии Tomcat
isSecure. Обязательно проверьте унаследованные методы.