Browse Source

Fix handling transformers properties. (#1037)

pull/1039/head
Olga Maciaszek-Sharma 3 years ago committed by GitHub
parent
commit
a61593ff3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java
  2. 17
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/BlockingLoadBalancerClientAutoConfiguration.java
  3. 38
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java
  4. 3
      spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java
  5. 6
      spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java

2
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java

@ -30,7 +30,6 @@ import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled; @@ -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 { @@ -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);
}

17
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 @@ -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 { @@ -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 { @@ -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 { @@ -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");
}
}
}

38
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/config/XForwardedConfigurationCondition.java

@ -1,38 +0,0 @@ @@ -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");
}
}

3
spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformer.java

@ -57,6 +57,9 @@ public class LoadBalancerServiceInstanceCookieTransformer implements LoadBalance @@ -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;

6
spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/core/LoadBalancerServiceInstanceCookieTransformerTests.java

@ -16,6 +16,7 @@ @@ -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 { @@ -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);

Loading…
Cancel
Save