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




Сначала установите точку останова в doPost и углубитесь в переменные, которые вы видите в стеке потоков. Существует объект запроса/ответа, и они будут специфичными для реализации (tomcat, причал и т.д...)
Решение зависит от них:
а) если вы можете получить доступ к sslsocket, углубившись в частные поля запроса или ответа. Я знаю, что ты можешь с котом.
б) если вы можете и хотите написать код, использующий отражение, и нет политики безопасности, запрещающей вам вызывать Field.setAccessible(true) и получать значение с помощью Field.get(..)
c) если вы способны обрабатывать сбои и у вас есть четкое указание на то, что регрессии в этом нескомпилированном коде могут быть обнаружены в dev или qa. Это связано с тем, что версия сервера обязательно будет обновлена в будущем, и ваш код может внезапно сломаться без ошибки компиляции. Интеграционные тесты обязательны.
Как вы, наверное, догадались, с помощью рефлексии можно углубиться в любые поля запроса или ответа.
Краткий ответ: вы не можете.