Tomcat WebSocket BufferOverflowException

时间:2018-05-15 14:26:03

标签: tomcat spring-websocket

我有一个微服务应用程序,我需要使用WebSockets作为其中一个功能。浏览器连接到API网关,然后需要将WebSocket请求转发到适当的微服务。为了实现这一点,在API网关中使用了Spring的StandardWebSocketClient。 API网关充当WebSocket请求的代理。

我的应用程序使用OAuth进行身份验证,因此当在API网关中代理WebSocket请求时,我也需要传递OAuth2令牌。当StandardWebSocketClient使用Tomcat发出CONNECT请求时,我得到BufferOverflowException,因为承载令牌似乎不适合Tomcat使用的缓冲区。

通过查看Tomcat源代码,缓冲区大小似乎限制为4096字节。请参阅:https://github.com/apache/tomcat/blob/8fd5d6273099c504e1739080c07cf4d33cff89bf/java/org/apache/tomcat/websocket/WsWebSocketContainer.java#L717

是否有某种方法可以克服这种限制?

1 个答案:

答案 0 :(得分:0)

由于Authorization标头中的令牌较大,因此也看到了这一点。使用Tomcat 8.5.x

用于构造HTTP请求的缓冲区被硬编码为4096个字节。我看不到任何解决方法-我认为需要为连接升级请求使用更大的或可配置的缓冲区来更新Tomcat。

我已经提交了有关Tomcat的错误报告-https://bz.apache.org/bugzilla/show_bug.cgi?id=62596-因此希望尽快得到解决。