Как получить доступ к SSLSocket, используемому для запроса сервлета, в теле метода doPost(?

Я реализую сервлет HTTP, создавая подкласс javax.servlet.http.HttpServlet и переопределяя метод doPost. В теле метода doPost мне нужно получить доступ к объекту SSLSocket, который использовался для обработки запроса и будет использоваться для обработки ответа. Контейнер сервлетов также используется в качестве HTTPS-сервера. Перед контейнером сервлета нет веб-сервера, балансировщика нагрузки, устройства завершения TLS и т. д. Клиенты подключаются напрямую к контейнеру сервлетов исключительно по протоколу HTTPS.

Как получить доступ к объекту SSLSocket, который использовался для обработки запроса и будет использоваться для обработки ответа из тела метода doPost?

Вам может быть любопытно, зачем мне это нужно. Мне нужно получить доступ к информации о привязке канала, связанной с соединением. Да, мне известно, что поддержка привязки каналов в настоящее время не стандартизирована в спецификации JSSE и, как следствие, не поддерживается поставщиком JSSE по умолчанию, предоставляемым Oracle. Вот почему я использую провайдера JSSE Bouncy Castle, который поддерживает привязку каналов.

Краткий ответ: вы не можете.

user207421 01.03.2019 00:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
64
1

Ответы 1

Сначала установите точку останова в doPost и углубитесь в переменные, которые вы видите в стеке потоков. Существует объект запроса/ответа, и они будут специфичными для реализации (tomcat, причал и т.д...)

Решение зависит от них:

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

б) если вы можете и хотите написать код, использующий отражение, и нет политики безопасности, запрещающей вам вызывать Field.setAccessible(true) и получать значение с помощью Field.get(..)

c) если вы способны обрабатывать сбои и у вас есть четкое указание на то, что регрессии в этом нескомпилированном коде могут быть обнаружены в dev или qa. Это связано с тем, что версия сервера обязательно будет обновлена ​​в будущем, и ваш код может внезапно сломаться без ошибки компиляции. Интеграционные тесты обязательны.

Как вы, наверное, догадались, с помощью рефлексии можно углубиться в любые поля запроса или ответа.

Другие вопросы по теме