Sets maxFramePayloadLength and proxyPing for WebSocketService.

It does this by reusing WebSocket properties for a new `ReactorNettyRequestUpgradeStrategy` bean.

Fixes gh-1610
Fixes gh-1611
This commit is contained in:
Nikita Konev
2020-03-15 09:35:11 +03:00
committed by Spencer Gibb
parent 2a7426025e
commit 10479fa821
2 changed files with 27 additions and 2 deletions

View File

@@ -151,8 +151,10 @@ import org.springframework.validation.Validator;
import org.springframework.web.reactive.DispatcherHandler;
import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient;
import org.springframework.web.reactive.socket.client.WebSocketClient;
import org.springframework.web.reactive.socket.server.RequestUpgradeStrategy;
import org.springframework.web.reactive.socket.server.WebSocketService;
import org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService;
import org.springframework.web.reactive.socket.server.upgrade.ReactorNettyRequestUpgradeStrategy;
import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool.PoolType.DISABLED;
import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool.PoolType.FIXED;
@@ -315,8 +317,9 @@ public class GatewayAutoConfiguration {
}
@Bean
public WebSocketService webSocketService() {
return new HandshakeWebSocketService();
public WebSocketService webSocketService(
RequestUpgradeStrategy requestUpgradeStrategy) {
return new HandshakeWebSocketService(requestUpgradeStrategy);
}
@Bean
@@ -739,6 +742,20 @@ public class GatewayAutoConfiguration {
return webSocketClient;
}
@Bean
public ReactorNettyRequestUpgradeStrategy reactorNettyRequestUpgradeStrategy(
HttpClientProperties httpClientProperties) {
ReactorNettyRequestUpgradeStrategy requestUpgradeStrategy = new ReactorNettyRequestUpgradeStrategy();
HttpClientProperties.Websocket websocket = httpClientProperties
.getWebsocket();
PropertyMapper map = PropertyMapper.get();
map.from(websocket::getMaxFramePayloadLength).whenNonNull()
.to(requestUpgradeStrategy::setMaxFramePayloadLength);
map.from(websocket::isProxyPing).to(requestUpgradeStrategy::setHandlePing);
return requestUpgradeStrategy;
}
}
@Configuration(proxyBeanMethods = false)

View File

@@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.reactive.HiddenHttpMethodFilter;
import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient;
import org.springframework.web.reactive.socket.server.upgrade.ReactorNettyRequestUpgradeStrategy;
import static org.assertj.core.api.Assertions.assertThat;
@@ -118,6 +119,13 @@ public class GatewayAutoConfigurationTests {
* assertThat(sslContext).isNotNull();
*/
// TODO: howto test SslContext
assertThat(context)
.hasSingleBean(ReactorNettyRequestUpgradeStrategy.class);
ReactorNettyRequestUpgradeStrategy upgradeStrategy = context
.getBean(ReactorNettyRequestUpgradeStrategy.class);
assertThat(upgradeStrategy.getMaxFramePayloadLength())
.isEqualTo(1024);
assertThat(upgradeStrategy.getHandlePing()).isTrue();
assertThat(context).hasSingleBean(ReactorNettyWebSocketClient.class);
ReactorNettyWebSocketClient webSocketClient = context
.getBean(ReactorNettyWebSocketClient.class);