Skip to content

Commit 8cadb3b

Browse files
authored
Merge pull request #4067 from NeatGuyCoding/fix-cookies-null
Add null check for sticky session in LoadBalancerServiceInstanceCookieFilter
2 parents 7621783 + 1157399 commit 8cadb3b

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

spring-cloud-gateway-server-webflux/src/main/java/org/springframework/cloud/gateway/filter/LoadBalancerServiceInstanceCookieFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
7070
? loadBalancerClientFactory.getProperties(serviceInstanceResponse.getServer().getServiceId())
7171
: loadBalancerProperties;
7272
Objects.requireNonNull(properties, "LoadBalancerProperties must not be null");
73-
if (properties.getStickySession() != null && !properties.getStickySession().isAddServiceInstanceCookie()) {
73+
if (properties.getStickySession() == null || !properties.getStickySession().isAddServiceInstanceCookie()) {
7474
return chain.filter(exchange);
7575
}
7676
String instanceIdCookieName = properties.getStickySession().getInstanceIdCookieName();

spring-cloud-gateway-server-webflux/src/test/java/org/springframework/cloud/gateway/filter/LoadBalancerServiceInstanceCookieFilterTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ void shouldContinueChainWhenEmptyServiceInstanceCookieName() {
119119
assertThat(filteredExchange.getRequest().getHeaders().isEmpty()).isTrue();
120120
}
121121

122+
@Test
123+
void shouldContinueChainWhenStickySessionIsNull() {
124+
exchange.getAttributes()
125+
.put(GATEWAY_LOADBALANCER_RESPONSE_ATTR,
126+
new DefaultResponse(new DefaultServiceInstance("test-01", "test", "host", 8080, false)));
127+
properties.setStickySession(null);
128+
129+
ServerWebExchange filteredExchange = testFilter(exchange);
130+
131+
assertThat(filteredExchange.getRequest().getHeaders().isEmpty()).isTrue();
132+
}
133+
122134
private ServerWebExchange testFilter(ServerWebExchange exchange) {
123135
ArgumentCaptor<ServerWebExchange> captor = ArgumentCaptor.forClass(ServerWebExchange.class);
124136
when(chain.filter(captor.capture())).thenReturn(Mono.empty());

0 commit comments

Comments
 (0)