Tomcat WebSocket BufferOverflowException

标签 tomcat spring-websocket

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

我的应用程序使用 OAuth 进行身份验证,因此当在 API 网关中代理 WebSocket 请求时,我还需要传递 OAuth2 token 。当 StandardWebSocketClient 使用 Tomcat 发出 CONNECT 请求时,我得到一个 BufferOverflowException,因为不记名 token 似乎不适合 Tomcat 。

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

是否有解决方法以某种方式克服此限制?

最佳答案

由于授权 header 中的大 token ,也看到了这一点。使用 Tomcat 8.5.x

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

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

关于Tomcat WebSocket BufferOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50352739/

相关文章:

java - Spring servlet 适用于 IntelliJ 但不适用于 tomcat

jsp - JSP在Tomcat 7.0.23无法编译 但是在Tomcat 5.5.28可以运行

grails - Spring Web Socket 不向所有应用程序服务器广播消息

java - Spring-MVC + Spring-websocket + @Cacheable 不起作用

java - Spring 4 Web 套接字 - 我必须有 stomp 代理吗?

java - 是否可以在 Spring 启动时将Web套接字与rest api一起使用?

tomcat - 嵌入在 Tomcat 中的 OSGi 中的 ClassCastException

java - mvn tomcat :run terminates

java - Apache TomEE 内存泄漏

spring-websocket - Spring WebSocket。在 Config 中访问 Cookie