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

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

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

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


person rossmpersonal    schedule 28.02.2019    source источник
comment
Краткий ответ: вы не можете.   -  person user207421    schedule 01.03.2019


Ответы (1)


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

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

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

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

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

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

person user2023577    schedule 01.03.2019