From 7b08c07e7e80225647d17a05635a86f3a180183b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 12 May 2025 21:57:26 -0700 Subject: [PATCH] Replace ClientHttpRequestFactorySettings.Redirects with HttpRedirects Closes gh-45505 --- .../client/ClientHttpRequestFactories.java | 3 +- .../ClientHttpRequestFactoriesTests.java | 3 +- .../HttpClientAutoConfigurationTests.java | 6 +-- ...tpServiceClientAutoConfigurationTests.java | 4 +- .../AutoConfiguredRestClientSslTests.java | 4 +- .../RestClientAutoConfigurationTests.java | 6 +-- .../test/web/client/TestRestTemplate.java | 16 +++--- .../web/client/TestRestTemplateTests.java | 25 ++++----- ...stractClientHttpRequestFactoryBuilder.java | 4 +- .../ClientHttpRequestFactorySettings.java | 52 ++----------------- .../HttpComponentsRedirectStrategy.java | 4 +- ...onentsClientHttpRequestFactoryBuilder.java | 5 +- ...SimpleClientHttpRequestFactoryBuilder.java | 5 +- .../boot/web/client/RestTemplateBuilder.java | 6 +-- ...tClientHttpRequestFactoryBuilderTests.java | 5 +- ...ClientHttpRequestFactorySettingsTests.java | 11 ++-- ...sClientHttpRequestFactoryBuilderTests.java | 7 ++- .../web/client/RestTemplateBuilderTests.java | 6 +-- ...h2AuthorizationServerApplicationTests.java | 6 +-- .../SampleOAuth2ClientApplicationTests.java | 4 +- ...mpleSaml2RelyingPartyApplicationTests.java | 4 +- .../SampleSessionJdbcApplicationTests.java | 6 +-- ...SampleWebSecureCustomApplicationTests.java | 6 +-- .../SampleWebSecureJdbcApplicationTests.java | 6 +-- .../SampleWebSecureApplicationTests.java | 6 +-- 25 files changed, 78 insertions(+), 132 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactories.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactories.java index d1327e5fe2..168021cea3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactories.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactories.java @@ -26,7 +26,6 @@ import org.springframework.boot.autoconfigure.http.client.AbstractHttpClientProp import org.springframework.boot.autoconfigure.http.client.AbstractHttpRequestFactoryProperties.Factory; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; @@ -64,7 +63,7 @@ public final class ClientHttpRequestFactories { StringUtils::hasLength); SslBundle sslBundle = (StringUtils.hasLength(sslBundleName)) ? this.sslBundles.getObject().getBundle(sslBundleName) : null; - return new ClientHttpRequestFactorySettings(Redirects.of(redirects), connectTimeout, readTimeout, sslBundle); + return new ClientHttpRequestFactorySettings(redirects, connectTimeout, readTimeout, sslBundle); } private T getProperty(Function accessor) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactoriesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactoriesTests.java index 6e1942f2d4..5e063100cf 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactoriesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/ClientHttpRequestFactoriesTests.java @@ -23,7 +23,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ObjectFactory; import org.springframework.boot.autoconfigure.http.client.AbstractHttpRequestFactoryProperties.Factory; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; import org.springframework.boot.http.client.HttpComponentsClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.http.client.JettyClientHttpRequestFactoryBuilder; @@ -88,7 +87,7 @@ class ClientHttpRequestFactoriesTests { p3.getSsl().setBundle("p3"); ClientHttpRequestFactories factories = new ClientHttpRequestFactories(this.sslBundles, p1, p2, p3); ClientHttpRequestFactorySettings settings = factories.settings(); - assertThat(settings).isEqualTo(new ClientHttpRequestFactorySettings(Redirects.DONT_FOLLOW, + assertThat(settings).isEqualTo(new ClientHttpRequestFactorySettings(HttpRedirects.DONT_FOLLOW, Duration.ofSeconds(1), Duration.ofSeconds(2), this.bundleRegistry.getBundle("p2"))); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java index ab04de563b..6eb4232804 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java @@ -26,8 +26,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; import org.springframework.boot.http.client.HttpComponentsClientHttpRequestFactoryBuilder; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.http.client.JdkClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.JettyClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ReactorClientHttpRequestFactoryBuilder; @@ -73,7 +73,7 @@ class HttpClientAutoConfigurationTests { "spring.http.client.read-timeout=20s", "spring.http.client.ssl.bundle=test") .run((context) -> { ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class); - assertThat(settings.redirects()).isEqualTo(Redirects.DONT_FOLLOW); + assertThat(settings.redirects()).isEqualTo(HttpRedirects.DONT_FOLLOW); assertThat(settings.connectTimeout()).isEqualTo(Duration.ofSeconds(10)); assertThat(settings.readTimeout()).isEqualTo(Duration.ofSeconds(20)); assertThat(settings.sslBundle().getKey().getAlias()).isEqualTo("alias1"); @@ -87,7 +87,7 @@ class HttpClientAutoConfigurationTests { "spring.http.client.read-timeout=20s", "spring.http.client.ssl.bundle=test") .run((context) -> { ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class); - assertThat(settings.redirects()).isEqualTo(Redirects.DONT_FOLLOW); + assertThat(settings.redirects()).isEqualTo(HttpRedirects.DONT_FOLLOW); assertThat(settings.connectTimeout()).isEqualTo(Duration.ofSeconds(10)); assertThat(settings.readTimeout()).isEqualTo(Duration.ofSeconds(20)); assertThat(settings.sslBundle().getKey().getAlias()).isEqualTo("alias1"); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/service/HttpServiceClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/service/HttpServiceClientAutoConfigurationTests.java index a1fba7e4ee..8c099d470e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/service/HttpServiceClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/service/HttpServiceClientAutoConfigurationTests.java @@ -33,7 +33,7 @@ import org.springframework.boot.autoconfigure.http.client.HttpClientAutoConfigur import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.client.RestClientCustomizer; import org.springframework.context.annotation.Bean; @@ -212,7 +212,7 @@ class HttpServiceClientAutoConfigurationTests { @Bean ClientHttpRequestFactorySettings requestFactorySettings() { - return ClientHttpRequestFactorySettings.defaults().withRedirects(Redirects.DONT_FOLLOW); + return ClientHttpRequestFactorySettings.defaults().withRedirects(HttpRedirects.DONT_FOLLOW); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/AutoConfiguredRestClientSslTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/AutoConfiguredRestClientSslTests.java index ec6b2b9932..7e6767c656 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/AutoConfiguredRestClientSslTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/AutoConfiguredRestClientSslTests.java @@ -26,7 +26,7 @@ import org.mockito.MockitoAnnotations; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.http.client.ClientHttpRequestFactory; @@ -47,7 +47,7 @@ class AutoConfiguredRestClientSslTests { private final ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings .ofSslBundle(mock(SslBundle.class, "Default SslBundle")) - .withRedirects(Redirects.DONT_FOLLOW) + .withRedirects(HttpRedirects.DONT_FOLLOW) .withReadTimeout(Duration.ofSeconds(10)) .withConnectTimeout(Duration.ofSeconds(30)); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java index 56f03e58d7..c9183fdefe 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java @@ -30,7 +30,7 @@ import org.springframework.boot.autoconfigure.http.client.HttpClientAutoConfigur import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -77,7 +77,7 @@ class RestClientAutoConfigurationTests { void shouldSupplyRestClientSslIfSslBundlesIsThereWithCustomHttpSettingsAndBuilder() { SslBundles sslBundles = mock(SslBundles.class); ClientHttpRequestFactorySettings clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.defaults() - .withRedirects(Redirects.DONT_FOLLOW) + .withRedirects(HttpRedirects.DONT_FOLLOW) .withConnectTimeout(Duration.ofHours(1)) .withReadTimeout(Duration.ofDays(1)) .withSslBundle(mock(SslBundle.class)); @@ -217,7 +217,7 @@ class RestClientAutoConfigurationTests { @Test void shouldSupplyRestClientBuilderConfigurerWithCustomSettings() { ClientHttpRequestFactorySettings clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.defaults() - .withRedirects(Redirects.DONT_FOLLOW); + .withRedirects(HttpRedirects.DONT_FOLLOW); ClientHttpRequestFactoryBuilder clientHttpRequestFactoryBuilder = mock( ClientHttpRequestFactoryBuilder.class); RestClientCustomizer customizer1 = mock(RestClientCustomizer.class); diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java index 4557e292df..735bb2b24c 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java @@ -49,8 +49,8 @@ import org.apache.hc.core5.ssl.TrustStrategy; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; import org.springframework.boot.http.client.HttpComponentsClientHttpRequestFactoryBuilder; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.boot.web.client.RootUriTemplateHandler; @@ -164,7 +164,7 @@ public class TestRestTemplate { builder = builder.requestFactoryBuilder(applyHttpClientOptions( (HttpComponentsClientHttpRequestFactoryBuilder) requestFactoryBuilder, httpClientOptions)); if (HttpClientOption.ENABLE_REDIRECTS.isPresent(httpClientOptions)) { - builder = builder.redirects(Redirects.FOLLOW); + builder = builder.redirects(HttpRedirects.FOLLOW); } } if (username != null || password != null) { @@ -976,14 +976,14 @@ public class TestRestTemplate { /** * Creates a new {@code TestRestTemplate} with the same configuration as this one, - * except that it will apply the given {@link Redirects}. The request factory used is - * a new instance of the underlying {@link RestTemplate}'s request factory type (when - * possible). + * except that it will apply the given {@link HttpRedirects}. The request factory used + * is a new instance of the underlying {@link RestTemplate}'s request factory type + * (when possible). * @param redirects the new redirect settings * @return the new template * @since 3.5.0 */ - public TestRestTemplate withRedirects(Redirects redirects) { + public TestRestTemplate withRedirects(HttpRedirects redirects) { return withRequestFactorySettings((settings) -> settings.withRedirects(redirects)); } @@ -1060,7 +1060,7 @@ public class TestRestTemplate { /** * Enable redirects. * @deprecated since 3.5.0 for removal in 4.0.0 in favor of - * {@link TestRestTemplate#withRedirects(Redirects)} + * {@link TestRestTemplate#withRedirects(HttpRedirects)} */ @Deprecated(since = "3.5.0", forRemoval = true) ENABLE_REDIRECTS, @@ -1112,7 +1112,7 @@ public class TestRestTemplate { ClientHttpRequestFactorySettings settings) { this.cookieSpec = (HttpClientOption.ENABLE_COOKIES.isPresent(httpClientOptions) ? StandardCookieSpec.STRICT : StandardCookieSpec.IGNORE); - this.enableRedirects = settings.redirects() != Redirects.DONT_FOLLOW; + this.enableRedirects = settings.redirects() != HttpRedirects.DONT_FOLLOW; boolean ssl = HttpClientOption.SSL.isPresent(httpClientOptions); if (settings.readTimeout() != null || ssl) { setHttpClient(createHttpClient(settings.readTimeout(), ssl)); diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java index ed0d981bfd..7a4f90ed50 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java @@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.web.client.TestRestTemplate.HttpClientOption; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; @@ -152,9 +152,9 @@ class TestRestTemplateTests { void jdkBuilderCanBeSpecifiedWithSpecificRedirects() { RestTemplateBuilder builder = new RestTemplateBuilder() .requestFactoryBuilder(ClientHttpRequestFactoryBuilder.jdk()); - TestRestTemplate templateWithRedirects = new TestRestTemplate(builder.redirects(Redirects.FOLLOW)); + TestRestTemplate templateWithRedirects = new TestRestTemplate(builder.redirects(HttpRedirects.FOLLOW)); assertThat(getJdkHttpClient(templateWithRedirects).followRedirects()).isEqualTo(Redirect.NORMAL); - TestRestTemplate templateWithoutRedirects = new TestRestTemplate(builder.redirects(Redirects.DONT_FOLLOW)); + TestRestTemplate templateWithoutRedirects = new TestRestTemplate(builder.redirects(HttpRedirects.DONT_FOLLOW)); assertThat(getJdkHttpClient(templateWithoutRedirects).followRedirects()).isEqualTo(Redirect.NEVER); } @@ -167,8 +167,9 @@ class TestRestTemplateTests { assertThat(getRedirectStrategy(null, HttpClientOption.ENABLE_REDIRECTS)).matches(this::isFollowStrategy); assertThat(getRedirectStrategy(builder)).matches(this::isFollowStrategy); assertThat(getRedirectStrategy(builder, HttpClientOption.ENABLE_REDIRECTS)).matches(this::isFollowStrategy); - assertThat(getRedirectStrategy(builder.redirects(Redirects.DONT_FOLLOW))).matches(this::isDontFollowStrategy); - assertThat(getRedirectStrategy(builder.redirects(Redirects.DONT_FOLLOW), HttpClientOption.ENABLE_REDIRECTS)) + assertThat(getRedirectStrategy(builder.redirects(HttpRedirects.DONT_FOLLOW))) + .matches(this::isDontFollowStrategy); + assertThat(getRedirectStrategy(builder.redirects(HttpRedirects.DONT_FOLLOW), HttpClientOption.ENABLE_REDIRECTS)) .matches(this::isFollowStrategy); } @@ -176,11 +177,11 @@ class TestRestTemplateTests { void withRequestFactorySettingsRedirectsForHttpComponents() { TestRestTemplate template = new TestRestTemplate(); assertThat(getRedirectStrategy(template)).matches(this::isFollowStrategy); - assertThat(getRedirectStrategy(template - .withRequestFactorySettings(ClientHttpRequestFactorySettings.defaults().withRedirects(Redirects.FOLLOW)))) + assertThat(getRedirectStrategy(template.withRequestFactorySettings( + ClientHttpRequestFactorySettings.defaults().withRedirects(HttpRedirects.FOLLOW)))) .matches(this::isFollowStrategy); assertThat(getRedirectStrategy(template.withRequestFactorySettings( - ClientHttpRequestFactorySettings.defaults().withRedirects(Redirects.DONT_FOLLOW)))) + ClientHttpRequestFactorySettings.defaults().withRedirects(HttpRedirects.DONT_FOLLOW)))) .matches(this::isDontFollowStrategy); } @@ -188,8 +189,8 @@ class TestRestTemplateTests { void withRedirects() { TestRestTemplate template = new TestRestTemplate(); assertThat(getRedirectStrategy(template)).matches(this::isFollowStrategy); - assertThat(getRedirectStrategy(template.withRedirects(Redirects.FOLLOW))).matches(this::isFollowStrategy); - assertThat(getRedirectStrategy(template.withRedirects(Redirects.DONT_FOLLOW))) + assertThat(getRedirectStrategy(template.withRedirects(HttpRedirects.FOLLOW))).matches(this::isFollowStrategy); + assertThat(getRedirectStrategy(template.withRedirects(HttpRedirects.DONT_FOLLOW))) .matches(this::isDontFollowStrategy); } @@ -199,7 +200,7 @@ class TestRestTemplateTests { new RestTemplateBuilder().requestFactoryBuilder(ClientHttpRequestFactoryBuilder.jdk())); assertThat(getJdkHttpClient(template).followRedirects()).isEqualTo(Redirect.NORMAL); assertThat(getJdkHttpClient(template.withRequestFactorySettings( - ClientHttpRequestFactorySettings.defaults().withRedirects(Redirects.DONT_FOLLOW))) + ClientHttpRequestFactorySettings.defaults().withRedirects(HttpRedirects.DONT_FOLLOW))) .followRedirects()).isEqualTo(Redirect.NEVER); } @@ -209,7 +210,7 @@ class TestRestTemplateTests { new RestTemplateBuilder().requestFactoryBuilder(ClientHttpRequestFactoryBuilder.jdk())); assertThat(getJdkHttpClient(template).followRedirects()).isEqualTo(Redirect.NORMAL); assertThat(getJdkHttpClient( - template.withRequestFactorySettings((settings) -> settings.withRedirects(Redirects.DONT_FOLLOW))) + template.withRequestFactorySettings((settings) -> settings.withRedirects(HttpRedirects.DONT_FOLLOW))) .followRedirects()).isEqualTo(Redirect.NEVER); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/AbstractClientHttpRequestFactoryBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/AbstractClientHttpRequestFactoryBuilder.java index 1f68276c91..42066272f9 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/AbstractClientHttpRequestFactoryBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/AbstractClientHttpRequestFactoryBuilder.java @@ -74,8 +74,8 @@ abstract class AbstractClientHttpRequestFactoryBuilder FOLLOW_WHEN_POSSIBLE; - case FOLLOW -> FOLLOW; - case DONT_FOLLOW -> DONT_FOLLOW; - } : null; - } - - } - } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsRedirectStrategy.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsRedirectStrategy.java index cccb933e28..87b55e10cc 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsRedirectStrategy.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/HttpComponentsRedirectStrategy.java @@ -24,10 +24,8 @@ import org.apache.hc.core5.http.HttpRequest; import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.protocol.HttpContext; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; - /** - * Adapts {@link Redirects} to an + * Adapts {@link HttpRedirects} to an * Apache HttpComponents * {@link RedirectStrategy}. * diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/ReflectiveComponentsClientHttpRequestFactoryBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/ReflectiveComponentsClientHttpRequestFactoryBuilder.java index d11c4e754a..a8ae3bc2e1 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/ReflectiveComponentsClientHttpRequestFactoryBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/http/client/ReflectiveComponentsClientHttpRequestFactoryBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 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. @@ -23,7 +23,6 @@ import java.time.Duration; import java.util.function.Supplier; import org.springframework.boot.context.properties.PropertyMapper; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.util.Assert; @@ -75,7 +74,7 @@ final class ReflectiveComponentsClientHttpRequestFactoryBuilder ofTestRequestFactory().build(settings)) .withMessage("Unable to set redirect follow using reflection"); } @@ -64,7 +63,7 @@ class ReflectiveComponentsClientHttpRequestFactoryBuilderTests @Override void redirectDontFollow(String httpMethod) throws Exception { ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults() - .withRedirects(Redirects.DONT_FOLLOW); + .withRedirects(HttpRedirects.DONT_FOLLOW); assertThatIllegalStateException().isThrownBy(() -> ofTestRequestFactory().build(settings)) .withMessage("Unable to set redirect follow using reflection"); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java index 3f77ed1bc0..08b4335719 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java @@ -32,7 +32,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; @@ -490,9 +490,9 @@ class RestTemplateBuilderTests { @Test void configureRedirects() { - assertThat(this.builder.redirects(Redirects.DONT_FOLLOW)).extracting("requestFactorySettings") + assertThat(this.builder.redirects(HttpRedirects.DONT_FOLLOW)).extracting("requestFactorySettings") .extracting("redirects") - .isSameAs(Redirects.DONT_FOLLOW); + .isSameAs(HttpRedirects.DONT_FOLLOW); } private ClientHttpRequest createRequest(RestTemplate template) { diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-authorization-server/src/test/java/smoketest/oauth2/server/SampleOAuth2AuthorizationServerApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-authorization-server/src/test/java/smoketest/oauth2/server/SampleOAuth2AuthorizationServerApplicationTests.java index 472c430767..2900022f7f 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-authorization-server/src/test/java/smoketest/oauth2/server/SampleOAuth2AuthorizationServerApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-authorization-server/src/test/java/smoketest/oauth2/server/SampleOAuth2AuthorizationServerApplicationTests.java @@ -24,7 +24,7 @@ import java.util.Objects; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; @@ -94,7 +94,7 @@ class SampleOAuth2AuthorizationServerApplicationTests { @Test void anonymousShouldRedirectToLogin() { - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .getForEntity("/", String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation()).isEqualTo(URI.create("http://localhost:" + this.port + "/login")); @@ -160,7 +160,7 @@ class SampleOAuth2AuthorizationServerApplicationTests { body.add(OAuth2ParameterNames.GRANT_TYPE, AuthorizationGrantType.CLIENT_CREDENTIALS.getValue()); body.add(OAuth2ParameterNames.SCOPE, "message.read message.write"); HttpEntity request = new HttpEntity<>(body, headers); - ResponseEntity> entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity> entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/token", HttpMethod.POST, request, MAP_TYPE_REFERENCE); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation()).isEqualTo(URI.create("http://localhost:" + this.port + "/login")); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/src/test/java/smoketest/oauth2/client/SampleOAuth2ClientApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/src/test/java/smoketest/oauth2/client/SampleOAuth2ClientApplicationTests.java index bde147fae9..88719adbd2 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/src/test/java/smoketest/oauth2/client/SampleOAuth2ClientApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/src/test/java/smoketest/oauth2/client/SampleOAuth2ClientApplicationTests.java @@ -21,7 +21,7 @@ import java.net.URI; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; @@ -43,7 +43,7 @@ class SampleOAuth2ClientApplicationTests { @Test void everythingShouldRedirectToLogin() { - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .getForEntity("/", String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation()).isEqualTo(URI.create("http://localhost:" + this.port + "/login")); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/src/test/java/smoketest/saml2/serviceprovider/SampleSaml2RelyingPartyApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/src/test/java/smoketest/saml2/serviceprovider/SampleSaml2RelyingPartyApplicationTests.java index f1719ed674..5897d05de6 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/src/test/java/smoketest/saml2/serviceprovider/SampleSaml2RelyingPartyApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/src/test/java/smoketest/saml2/serviceprovider/SampleSaml2RelyingPartyApplicationTests.java @@ -21,7 +21,7 @@ import java.net.URI; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; @@ -41,7 +41,7 @@ class SampleSaml2RelyingPartyApplicationTests { @Test void everythingShouldRedirectToLogin() { - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .getForEntity("/", String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation()).isEqualTo(URI.create("http://localhost:" + this.port + "/login")); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java index 76597c8f14..2d72fc1d83 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 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. @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; @@ -58,7 +58,7 @@ class SampleSessionJdbcApplicationTests { private static final ClientHttpRequestFactorySettings DONT_FOLLOW_REDIRECTS = ClientHttpRequestFactorySettings .defaults() - .withRedirects(Redirects.DONT_FOLLOW); + .withRedirects(HttpRedirects.DONT_FOLLOW); @Autowired private RestTemplateBuilder restTemplateBuilder; diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/src/test/java/smoketest/web/secure/custom/SampleWebSecureCustomApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/src/test/java/smoketest/web/secure/custom/SampleWebSecureCustomApplicationTests.java index b43b6e4f71..00bde1317d 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/src/test/java/smoketest/web/secure/custom/SampleWebSecureCustomApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/src/test/java/smoketest/web/secure/custom/SampleWebSecureCustomApplicationTests.java @@ -21,7 +21,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -56,7 +56,7 @@ class SampleWebSecureCustomApplicationTests { void testHome() { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/", HttpMethod.GET, new HttpEntity<>(headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login"); @@ -80,7 +80,7 @@ class SampleWebSecureCustomApplicationTests { MultiValueMap form = new LinkedMultiValueMap<>(); form.set("username", "user"); form.set("password", "password"); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/login", HttpMethod.POST, new HttpEntity<>(form, headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/"); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/src/test/java/smoketest/web/secure/jdbc/SampleWebSecureJdbcApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/src/test/java/smoketest/web/secure/jdbc/SampleWebSecureJdbcApplicationTests.java index 4d5f0a1ef7..86d0a41ba1 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/src/test/java/smoketest/web/secure/jdbc/SampleWebSecureJdbcApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/src/test/java/smoketest/web/secure/jdbc/SampleWebSecureJdbcApplicationTests.java @@ -21,7 +21,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -56,7 +56,7 @@ class SampleWebSecureJdbcApplicationTests { void testHome() { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/", HttpMethod.GET, new HttpEntity<>(headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login"); @@ -80,7 +80,7 @@ class SampleWebSecureJdbcApplicationTests { MultiValueMap form = new LinkedMultiValueMap<>(); form.set("username", "user"); form.set("password", "user"); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/login", HttpMethod.POST, new HttpEntity<>(form, headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/"); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/src/test/java/smoketest/web/secure/SampleWebSecureApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/src/test/java/smoketest/web/secure/SampleWebSecureApplicationTests.java index ffe0d2fbde..0b9c3fd1ea 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/src/test/java/smoketest/web/secure/SampleWebSecureApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/src/test/java/smoketest/web/secure/SampleWebSecureApplicationTests.java @@ -22,7 +22,7 @@ import jakarta.servlet.DispatcherType; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -63,7 +63,7 @@ class SampleWebSecureApplicationTests { void testHome() { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/home", HttpMethod.GET, new HttpEntity<>(headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login"); @@ -87,7 +87,7 @@ class SampleWebSecureApplicationTests { MultiValueMap form = new LinkedMultiValueMap<>(); form.set("username", "user"); form.set("password", "password"); - ResponseEntity entity = this.restTemplate.withRedirects(Redirects.DONT_FOLLOW) + ResponseEntity entity = this.restTemplate.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange("/login", HttpMethod.POST, new HttpEntity<>(form, headers), String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/");