Tomcat WebSocket BufferOverflowException - PullRequest
0 голосов
/ 15 мая 2018

У меня есть приложение микро-услуг, где мне нужно использовать WebSockets для одной из функций.Браузер подключается к шлюзу API, который затем должен перенаправить запрос WebSocket в соответствующий микросервис.Для реализации этого в шлюзе API используется Spring * StandardWebSocketClient.Шлюз API действует как прокси-сервер для запросов WebSocket.

Мое приложение использует OAuth для аутентификации, поэтому, когда запрос WebSocket проксируется в шлюзе API, мне также необходимо передать токен OAuth2.Когда StandardWebSocketClient выдает запрос CONNECT с использованием Tomcat, я получаю BufferOverflowException, потому что токен носителя, похоже, не помещается в буфер, используемый Tomcat.

При просмотре исходного кода Tomcatразмер буфера, по-видимому, ограничен 4096 байтами.См .: https://github.com/apache/tomcat/blob/8fd5d6273099c504e1739080c07cf4d33cff89bf/java/org/apache/tomcat/websocket/WsWebSocketContainer.java#L717

Есть ли обходной путь, чтобы как-то преодолеть это ограничение?

1 Ответ

0 голосов
/ 03 августа 2018

Это также видно из-за большого токена в заголовке авторизации. Использование Tomcat 8.5.x

Буфер для построения HTTP-запроса жестко закодирован как 4096 байт. Я не вижу в этом никакого пути - я думаю, что Tomcat нужно обновить с помощью большего или настраиваемого буфера для запроса на обновление соединения.

Я отправил отчет об ошибке для Tomcat - https://bz.apache.org/bugzilla/show_bug.cgi?id=62596 - так что, надеюсь, скоро будет исправлен.

...