diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java index 58d507ff..0239e27c 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java @@ -16,6 +16,8 @@ package org.springframework.cloud.netflix.ribbon; +import org.apache.http.client.params.ClientPNames; +import org.apache.http.client.params.CookiePolicy; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -37,6 +39,8 @@ import com.netflix.loadbalancer.ZoneAvoidanceRule; import com.netflix.loadbalancer.ZoneAwareLoadBalancer; import com.netflix.niws.client.http.RestClient; import com.netflix.servo.monitor.Monitors; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.client.apache4.ApacheHttpClient4; /** * @author Dave Syer @@ -86,7 +90,7 @@ public class RibbonClientConfiguration { @Bean @ConditionalOnMissingBean public RestClient ribbonRestClient(IClientConfig config, ILoadBalancer loadBalancer) { - RestClient client = new RestClient(config); + RestClient client = new OverrideRestClient(config); client.setLoadBalancer(loadBalancer); Monitors.registerObject("Client_" + this.name, client); return client; @@ -119,4 +123,23 @@ public class RibbonClientConfiguration { return new RibbonLoadBalancerContext(loadBalancer, config); } + private static class OverrideRestClient extends RestClient { + + private OverrideRestClient(IClientConfig ncc) { + super(ncc); + } + + @Override + protected Client apacheHttpClientSpecificInitialization() { + ApacheHttpClient4 apache = (ApacheHttpClient4) super + .apacheHttpClientSpecificInitialization(); + apache.getClientHandler() + .getHttpClient() + .getParams() + .setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES); + return apache; + } + + } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/SpringClientFactoryTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/SpringClientFactoryTests.java index c94318c5..96b25c7d 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/SpringClientFactoryTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/SpringClientFactoryTests.java @@ -16,12 +16,16 @@ package org.springframework.cloud.netflix.ribbon; +import org.apache.http.client.params.ClientPNames; +import org.apache.http.client.params.CookiePolicy; import org.junit.Test; import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.netflix.client.DefaultLoadBalancerRetryHandler; +import com.netflix.niws.client.http.RestClient; +import com.sun.jersey.client.apache4.ApacheHttpClient4; import static org.junit.Assert.assertEquals; @@ -46,4 +50,12 @@ public class SpringClientFactoryTests { this.factory.destroy(); } + @Test + public void testCookiePolicy() { + RestClient client = this.factory.getClient("foo", RestClient.class); + ApacheHttpClient4 jerseyClient = (ApacheHttpClient4) client.getJerseyClient(); + assertEquals(CookiePolicy.IGNORE_COOKIES, jerseyClient.getClientHandler() + .getHttpClient().getParams().getParameter(ClientPNames.COOKIE_POLICY)); + this.factory.destroy(); + } }