From a61593ff3b1208596e92f6c92d042a33076368e1 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 2 Nov 2021 19:57:31 +0100 Subject: [PATCH] Fix handling transformers properties. (#1037) --- .../LoadBalancerClientConfiguration.java | 2 - ...ngLoadBalancerClientAutoConfiguration.java | 17 --------- .../XForwardedConfigurationCondition.java | 38 ------------------- ...ancerServiceInstanceCookieTransformer.java | 3 ++ ...ServiceInstanceCookieTransformerTests.java | 6 +++ 5 files changed, 9 insertions(+), 57 deletions(-) delete mode 100644 spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java index 158248fb..805c5ba3 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; -import org.springframework.cloud.loadbalancer.config.XForwardedConfigurationCondition; import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; import org.springframework.cloud.loadbalancer.core.RetryAwareServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer; @@ -100,7 +99,6 @@ public class LoadBalancerClientConfiguration { @Bean @ConditionalOnBean({ XForwardedHeadersTransformer.class, LoadBalancerClientFactory.class }) @ConditionalOnMissingBean - @Conditional(XForwardedConfigurationCondition.class) public XForwardedHeadersTransformer xForwarderHeadersTransformer(LoadBalancerClientFactory clientFactory) { return new XForwardedHeadersTransformer(clientFactory); } diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java index 9b658720..99cdcb05 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java @@ -35,13 +35,8 @@ import org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalanc import org.springframework.cloud.loadbalancer.blocking.retry.BlockingLoadBalancedRetryFactory; import org.springframework.cloud.loadbalancer.core.LoadBalancerServiceInstanceCookieTransformer; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; -import org.springframework.cloud.loadbalancer.support.LoadBalancerEnvironmentPropertyUtils; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Condition; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; -import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.retry.support.RetryTemplate; import org.springframework.web.client.RestTemplate; @@ -68,7 +63,6 @@ public class BlockingLoadBalancerClientAutoConfiguration { } @Bean - @Conditional(AddServiceInstanceCookieCondition.class) @ConditionalOnMissingBean(LoadBalancerServiceInstanceCookieTransformer.class) public LoadBalancerServiceInstanceCookieTransformer loadBalancerServiceInstanceCookieTransformer( LoadBalancerProperties properties) { @@ -76,7 +70,6 @@ public class BlockingLoadBalancerClientAutoConfiguration { } @Bean - @Conditional(XForwardedConfigurationCondition.class) @ConditionalOnMissingBean(XForwardedHeadersTransformer.class) @ConditionalOnBean(LoadBalancerClientFactory.class) public XForwardedHeadersTransformer xForwarderHeadersTransformer( @@ -98,14 +91,4 @@ public class BlockingLoadBalancerClientAutoConfiguration { } - static class AddServiceInstanceCookieCondition implements Condition { - - @Override - public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return LoadBalancerEnvironmentPropertyUtils.trueForClientOrDefault(context.getEnvironment(), - "sticky-session.add-service-instance-cookie"); - } - - } - } diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java deleted file mode 100644 index f82cb069..00000000 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2012-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.loadbalancer.config; - -import org.springframework.cloud.loadbalancer.support.LoadBalancerEnvironmentPropertyUtils; -import org.springframework.context.annotation.Condition; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; - -/** - * Condition matched when x-forwarded headers are enabled via properties. - * - * @author Olga Maciaszek-Sharma - * @since 3.1.0 - */ -public class XForwardedConfigurationCondition implements Condition { - - @Override - public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return LoadBalancerEnvironmentPropertyUtils.trueForClientOrDefault(context.getEnvironment(), - "spring.cloud.loadbalancer.x-forwarded.enabled"); - } - -} diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java index 7ab2a46b..6aed0d0a 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java @@ -57,6 +57,9 @@ public class LoadBalancerServiceInstanceCookieTransformer implements LoadBalance } LoadBalancerProperties.StickySession stickySession = factory != null ? factory.getProperties(instance.getServiceId()).getStickySession() : stickySessionProperties; + if (!stickySession.isAddServiceInstanceCookie()) { + return request; + } String instanceIdCookieName = stickySession.getInstanceIdCookieName(); if (!StringUtils.hasText(instanceIdCookieName)) { return request; diff --git a/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java b/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java index d4a647be..aa419b1f 100644 --- a/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java +++ b/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.loadbalancer.core; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.cloud.client.DefaultServiceInstance; @@ -43,6 +44,11 @@ class LoadBalancerServiceInstanceCookieTransformerTests { HttpRequest request = new MockClientHttpRequest(); + @BeforeEach + void setUp() { + stickySessionProperties.setAddServiceInstanceCookie(true); + } + @Test void shouldAddServiceInstanceCookieHeader() { HttpRequest newRequest = transformer.transformRequest(request, serviceInstance);