diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java index a03f2039..d5c1bb2a 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java @@ -46,7 +46,6 @@ import jakarta.servlet.http.HttpServletRequestWrapper; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponseWrapper; -import org.springframework.cloud.gateway.mvc.config.ProxyProperties; import org.springframework.core.Conventions; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterizedTypeReference; @@ -139,12 +138,6 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBody */ public class ProxyExchange { - /** - * Contains headers that are considered case-sensitive by default. - * @deprecated {@link ProxyProperties#DEFAULT_SENSITIVE} - */ - public static Set DEFAULT_SENSITIVE = ProxyProperties.DEFAULT_SENSITIVE; - private URI uri; private RestTemplate rest; @@ -211,17 +204,6 @@ public class ProxyExchange { return this; } - /** - * Sets the names of sensitive headers that are not passed downstream to the backend - * service. - * @param names the names of sensitive headers - * @return this for convenience - * @deprecated {@link #excluded(String...)} - */ - public ProxyExchange sensitive(String... names) { - return excluded(names); - } - /** * Sets the names of excluded headers that are not passed downstream to the backend * service. diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java index ddf0b9d7..7740cc02 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java @@ -64,11 +64,6 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol : autoForwardedHeaders.stream().map(String::toLowerCase).collect(toSet()); } - @Deprecated - public void setSensitive(Set excluded) { - setExcluded(excluded); - } - public void setExcluded(Set excluded) { this.excluded = excluded; } diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyProperties.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyProperties.java deleted file mode 100644 index e9b546bf..00000000 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyProperties.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2016-2019 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.gateway.mvc.config; - -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; -import org.springframework.cloud.gateway.mvc.ProxyExchange; -import org.springframework.http.HttpHeaders; - -/** - * Configuration properties for the {@link ProxyExchange} argument handler in - * @RequestMapping methods. - * - * @author Dave Syer - * @author Tim Ysewyn - * @author Joris Kuipers - * @author Spencer Gibb - * @deprecated {@link ProxyExchangeWebMvcProperties} - */ -@Deprecated -@ConfigurationProperties("spring.cloud.gateway.proxy") -public class ProxyProperties { - - /** - * Contains headers that are considered case-sensitive by default. - */ - public static Set DEFAULT_SENSITIVE = Set.of("cookie", "authorization"); - - /** - * Contains headers that are skipped by default. - */ - public static Set DEFAULT_SKIPPED = Set.of("content-length", "host"); - - /** - * Fixed header values that will be added to all downstream requests. - */ - private Map headers = new LinkedHashMap<>(); - - /** - * A set of header names that should be sent downstream by default. - */ - private Set autoForward = new HashSet<>(); - - /** - * A set of sensitive header names that will not be sent downstream by default. - */ - private Set sensitive = DEFAULT_SENSITIVE; - - /** - * A set of header names that will not be sent downstream because they could be - * problematic. - */ - private Set skipped = DEFAULT_SKIPPED; - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebMvcProperties.PREFIX + ".headers", since = "4.3.0") - public Map getHeaders() { - return headers; - } - - public void setHeaders(Map headers) { - this.headers = headers; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebMvcProperties.PREFIX + ".auto-forward", - since = "4.3.0") - public Set getAutoForward() { - return autoForward; - } - - public void setAutoForward(Set autoForward) { - this.autoForward = autoForward; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebMvcProperties.PREFIX + ".sensitive", since = "4.3.0") - public Set getSensitive() { - return sensitive; - } - - public void setSensitive(Set sensitive) { - this.sensitive = sensitive; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebMvcProperties.PREFIX + ".skipped", since = "4.3.0") - public Set getSkipped() { - return skipped; - } - - public void setSkipped(Set skipped) { - this.skipped = skipped; - } - - public HttpHeaders convertHeaders() { - HttpHeaders headers = new HttpHeaders(); - for (String key : this.headers.keySet()) { - headers.set(key, this.headers.get(key)); - } - return headers; - } - -} diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java index 7ad6ab2d..863df474 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java @@ -58,7 +58,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication @ConditionalOnClass({ HandlerMethodReturnValueHandler.class }) -@EnableConfigurationProperties({ ProxyExchangeWebMvcProperties.class, ProxyProperties.class }) +@EnableConfigurationProperties({ ProxyExchangeWebMvcProperties.class }) public class ProxyResponseAutoConfiguration implements WebMvcConfigurer { @Autowired diff --git a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/GetWithBodyRequestTests.java b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/GetWithBodyRequestTests.java index 7cf67e45..e9295019 100644 --- a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/GetWithBodyRequestTests.java +++ b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/GetWithBodyRequestTests.java @@ -33,7 +33,7 @@ import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cloud.gateway.mvc.GetWithBodyRequestTests.TestApplication.Foo; import org.springframework.cloud.gateway.mvc.config.ProxyExchangeArgumentResolver; -import org.springframework.cloud.gateway.mvc.config.ProxyProperties; +import org.springframework.cloud.gateway.mvc.config.ProxyExchangeWebMvcProperties; import org.springframework.cloud.gateway.mvc.http.GetWithBodyRequestClientHttpRequestFactory; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpEntity; @@ -108,7 +108,7 @@ public class GetWithBodyRequestTests { } @Bean - public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver(final ProxyProperties proxy) { + public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver(final ProxyExchangeWebMvcProperties proxy) { ProxyExchangeArgumentResolver resolver = new ProxyExchangeArgumentResolver( generateConfiguredRestTemplate()); resolver.setHeaders(proxy.convertHeaders()); diff --git a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeWebmvcPropertiesMigrationTests.java b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeWebmvcPropertiesMigrationTests.java deleted file mode 100644 index 4c15b7f3..00000000 --- a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeWebmvcPropertiesMigrationTests.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2013-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. - * 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.gateway.mvc.config; - -import org.junit.jupiter.api.Test; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.ActiveProfiles; - -import static org.assertj.core.api.Assertions.assertThat; - -@SuppressWarnings("unchecked") -@SpringBootTest(properties = {}, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("propertiesmigrationtests") -public class ProxyExchangeWebmvcPropertiesMigrationTests { - - @Autowired - ProxyExchangeWebMvcProperties properties; - - @Test - public void deprecatedRoutePropertiesWork() { - assertThat(properties.getHeaders()).hasSize(2); - assertThat(properties.getAutoForward()).hasSize(2); - assertThat(properties.getSensitive()).hasSize(2); - assertThat(properties.getSkipped()).hasSize(3); - } - - @SpringBootConfiguration - @EnableAutoConfiguration - protected static class TestConfiguration { - - } - -} diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcProperties.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcProperties.java index 6a8d3d96..7f5a26c3 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcProperties.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcProperties.java @@ -16,7 +16,6 @@ package org.springframework.cloud.gateway.server.mvc.config; -import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; @@ -26,7 +25,6 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import org.springframework.core.style.ToStringCreator; import org.springframework.http.MediaType; @@ -52,8 +50,6 @@ public class GatewayMvcProperties { @Valid private LinkedHashMap routesMap = new LinkedHashMap<>(); - private HttpClient httpClient = new HttpClient(); - /** * Mime-types that are streaming. */ @@ -88,10 +84,6 @@ public class GatewayMvcProperties { this.routesMap = routesMap; } - public HttpClient getHttpClient() { - return httpClient; - } - public List getStreamingMediaTypes() { return streamingMediaTypes; } @@ -118,8 +110,7 @@ public class GatewayMvcProperties { @Override public String toString() { - return new ToStringCreator(this).append("httpClient", httpClient) - .append("routes", routes) + return new ToStringCreator(this).append("routes", routes) .append("routesMap", routesMap) .append("streamingMediaTypes", streamingMediaTypes) .append("streamingBufferSize", streamingBufferSize) @@ -127,86 +118,4 @@ public class GatewayMvcProperties { .toString(); } - /** - * @deprecated in favor of spring.http.client. - */ - @Deprecated - public static class HttpClient { - - /** The HttpClient connect timeout. */ - private Duration connectTimeout; - - /** The HttpClient read timeout. */ - private Duration readTimeout; - - /** The name of the SSL bundle to use. */ - private String sslBundle; - - /** The HttpClient type. Defaults to JDK. */ - private HttpClientType type = HttpClientType.JDK; - - @Deprecated - @DeprecatedConfigurationProperty(replacement = "spring.http.client.connect-timeout", since = "4.2.0") - public Duration getConnectTimeout() { - return connectTimeout; - } - - public void setConnectTimeout(Duration connectTimeout) { - this.connectTimeout = connectTimeout; - } - - @Deprecated - @DeprecatedConfigurationProperty(replacement = "spring.http.client.read-timeout", since = "4.2.0") - public Duration getReadTimeout() { - return readTimeout; - } - - public void setReadTimeout(Duration readTimeout) { - this.readTimeout = readTimeout; - } - - @Deprecated - @DeprecatedConfigurationProperty(replacement = "spring.http.client.ssl.bundle", since = "4.2.0") - public String getSslBundle() { - return sslBundle; - } - - public void setSslBundle(String sslBundle) { - this.sslBundle = sslBundle; - } - - @Deprecated - public HttpClientType getType() { - return type; - } - - public void setType(HttpClientType type) { - this.type = type; - } - - @Override - public String toString() { - return new ToStringCreator(this).append("connectTimeout", connectTimeout) - .append("readTimeout", readTimeout) - .append("sslBundle", sslBundle) - .append("type", type) - .toString(); - } - - } - - public enum HttpClientType { - - /** - * Use JDK HttpClient. - */ - JDK, - - /** - * Auto-detect the HttpClient. - */ - AUTODETECT - - } - } diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayServerWebMvcPropertiesMigrationListener.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayServerWebMvcPropertiesMigrationListener.java deleted file mode 100644 index 9c50225d..00000000 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/GatewayServerWebMvcPropertiesMigrationListener.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright 2013-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. - * 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.gateway.server.mvc.config; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.boot.context.event.ApplicationFailedEvent; -import org.springframework.boot.context.event.ApplicationPreparedEvent; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.boot.context.event.SpringApplicationEvent; -import org.springframework.boot.context.properties.source.ConfigurationProperty; -import org.springframework.boot.context.properties.source.ConfigurationPropertyName; -import org.springframework.boot.context.properties.source.ConfigurationPropertySource; -import org.springframework.boot.context.properties.source.ConfigurationPropertySources; -import org.springframework.boot.context.properties.source.IterableConfigurationPropertySource; -import org.springframework.boot.env.OriginTrackedMapPropertySource; -import org.springframework.boot.origin.Origin; -import org.springframework.boot.origin.OriginTrackedValue; -import org.springframework.boot.origin.PropertySourceOrigin; -import org.springframework.boot.origin.TextResourceOrigin; -import org.springframework.context.ApplicationListener; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.PropertySource; -import org.springframework.util.ClassUtils; -import org.springframework.util.LinkedMultiValueMap; - -class GatewayServerWebMvcPropertiesMigrationListener implements ApplicationListener { - - private static final Log logger = LogFactory.getLog(GatewayServerWebMvcPropertiesMigrationListener.class); - - private static final String PROPERTIES_MIGRATOR_CLASS = "org.springframework.boot.context.properties.migrator.PropertiesMigrationListener"; - - private static final String DEPRECATED_ROOT = "spring.cloud.gateway.mvc"; - - private static final String DEPRECATED_ROUTES_LIST_KEY = DEPRECATED_ROOT + ".routes"; - - private static final String DEPRECATED_ROUTES_MAP_KEY = DEPRECATED_ROOT + ".routes-map"; - - private static final String GATEWAY_PROPERTY_SOURCE_PREFIX = "migrategatewaymvc"; - - private static final String NEW_ROUTES_LIST_KEY = GatewayMvcProperties.PREFIX + ".routes"; - - private static final String NEW_ROUTES_MAP_KEY = GatewayMvcProperties.PREFIX + ".routes-map"; - - private final List routesMigrations = new ArrayList<>(); - - @Override - public void onApplicationEvent(SpringApplicationEvent event) { - // only run if spring-boot-properties-migrator is on the classpath - if (!ClassUtils.isPresent(PROPERTIES_MIGRATOR_CLASS, null)) { - return; - } - if (event instanceof ApplicationPreparedEvent preparedEvent) { - onApplicationPreparedEvent(preparedEvent); - } - if (event instanceof ApplicationReadyEvent || event instanceof ApplicationFailedEvent) { - logLegacyPropertiesReport(); - } - } - - private void onApplicationPreparedEvent(ApplicationPreparedEvent event) { - // find deprecated keys - ConfigurableEnvironment env = event.getApplicationContext().getEnvironment(); - - ConfigurationPropertySources.get(env).forEach(propertySource -> { - routesMigrations.addAll(migrate(env, propertySource, GATEWAY_PROPERTY_SOURCE_PREFIX + "routes-", - DEPRECATED_ROUTES_LIST_KEY, NEW_ROUTES_LIST_KEY)); - routesMigrations.addAll(migrate(env, propertySource, GATEWAY_PROPERTY_SOURCE_PREFIX + "routes-map-", - DEPRECATED_ROUTES_MAP_KEY, NEW_ROUTES_MAP_KEY)); - }); - } - - private List migrate(ConfigurableEnvironment env, ConfigurationPropertySource propertySource, - String propertySourcePrefix, String deprecatedKey, String newKeyPrefix) { - List migrations = new ArrayList<>(); - - if (propertySource instanceof IterableConfigurationPropertySource iterableSource) { - ConfigurationPropertyName routesParentName = ConfigurationPropertyName.of(deprecatedKey); - List matchingConfigProps = iterableSource.filter(n -> { - if (n.getNumberOfElements() < routesParentName.getNumberOfElements()) { - return false; - } - ConfigurationPropertyName chop = n.chop(routesParentName.getNumberOfElements()); - return routesParentName.equals(chop); - }).stream().toList(); - if (!matchingConfigProps.isEmpty()) { - String originalPropertySourceName; - if (propertySource.getUnderlyingSource() instanceof PropertySource underlyingSource) { - originalPropertySourceName = underlyingSource.getName(); - } - else { - originalPropertySourceName = propertySource.getUnderlyingSource().toString(); - } - String newPropertySourceName = propertySourcePrefix + originalPropertySourceName; - Map content = new LinkedHashMap<>(); - // migrate to new keys - for (ConfigurationPropertyName originalPropertyName : matchingConfigProps) { - ConfigurationPropertyName suffix = originalPropertyName - .subName(routesParentName.getNumberOfElements()); - ConfigurationPropertyName newProperty = ConfigurationPropertyName.of(newKeyPrefix).append(suffix); - ConfigurationProperty configurationProperty = propertySource - .getConfigurationProperty(originalPropertyName); - Object value = configurationProperty.getValue(); - OriginTrackedValue originTrackedValue = OriginTrackedValue.of(value, - configurationProperty.getOrigin()); - content.put(newProperty.toString(), originTrackedValue); - migrations.add(new Migration(originalPropertySourceName, originalPropertyName, - configurationProperty, newProperty)); - } - env.getPropertySources() - .addBefore(originalPropertySourceName, - new OriginTrackedMapPropertySource(newPropertySourceName, content)); - } - } - return migrations; - } - - private void logLegacyPropertiesReport() { - // log warnings - if (!routesMigrations.isEmpty()) { - LinkedMultiValueMap content = new LinkedMultiValueMap<>(); - routesMigrations.forEach(migration -> content.add(migration.originalPropertySourceName(), migration)); - - StringBuilder report = new StringBuilder(); - report.append(String - .format("%nThe use of configuration keys that have been renamed was found in the environment:%n%n")); - - content.forEach((name, properties) -> { - report.append(String.format("Property source '%s':%n", name)); - // properties.sort(PropertyMigration.COMPARATOR); - properties.forEach((property) -> { - ConfigurationPropertyName originalPropertyName = property.originalPropertyName(); - report.append(String.format("\tKey: %s%n", originalPropertyName)); - Integer lineNumber = property.determineLineNumber(); - if (lineNumber != null) { - report.append(String.format("\t\tLine: %d%n", lineNumber)); - } - report.append(String.format("\t\tReplacement: %s%n", property.newProperty().toString())); - }); - report.append(String.format("%n")); - }); - - report.append(String.format("%n")); - report.append("Each configuration key has been temporarily mapped to its " - + "replacement for your convenience. To silence this warning, please " - + "update your configuration to use the new keys."); - report.append(String.format("%n")); - logger.warn(report.toString()); - } - } - - private record Migration(String originalPropertySourceName, ConfigurationPropertyName originalPropertyName, - ConfigurationProperty originalProperty, ConfigurationPropertyName newProperty) { - - private Integer determineLineNumber() { - Origin origin = originalProperty.getOrigin(); - if (origin instanceof PropertySourceOrigin propertySourceOrigin) { - origin = propertySourceOrigin.getOrigin(); - } - if (origin instanceof TextResourceOrigin textOrigin) { - if (textOrigin.getLocation() != null) { - return textOrigin.getLocation().getLine() + 1; - } - } - return null; - } - } - -} diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/RouterFunctionHolderFactory.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/RouterFunctionHolderFactory.java index 0973f657..306d3d0d 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/RouterFunctionHolderFactory.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/RouterFunctionHolderFactory.java @@ -120,11 +120,6 @@ public class RouterFunctionHolderFactory { private final ConversionService conversionService; - @Deprecated - public RouterFunctionHolderFactory(Environment env) { - this(env, null, null, null); - } - public RouterFunctionHolderFactory(Environment env, BeanFactory beanFactory, FilterBeanFactoryDiscoverer filterBeanFactoryDiscoverer, PredicateBeanFactoryDiscoverer predicateBeanFactoryDiscoverer) { diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/ClientHttpRequestFactoryProxyExchange.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/ClientHttpRequestFactoryProxyExchange.java index db1685d9..58b48ca4 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/ClientHttpRequestFactoryProxyExchange.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/ClientHttpRequestFactoryProxyExchange.java @@ -33,12 +33,6 @@ public class ClientHttpRequestFactoryProxyExchange extends AbstractProxyExchange private final ClientHttpRequestFactory requestFactory; - @Deprecated - public ClientHttpRequestFactoryProxyExchange(ClientHttpRequestFactory requestFactory) { - super(new GatewayMvcProperties()); - this.requestFactory = requestFactory; - } - public ClientHttpRequestFactoryProxyExchange(ClientHttpRequestFactory requestFactory, GatewayMvcProperties properties) { super(properties); diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerDiscoverer.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerDiscoverer.java index 7569842d..30931953 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerDiscoverer.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerDiscoverer.java @@ -41,12 +41,6 @@ public class HandlerDiscoverer extends AbstractGatewayDiscoverer { private final List> higherPrecedenceFilters; - @Deprecated - public Result(HandlerFunction handlerFunction, - List> filters) { - this(handlerFunction, Collections.emptyList(), filters); - } - public Result(HandlerFunction handlerFunction, List> lowerPrecedenceFilters, List> higherPrecedenceFilters) { @@ -59,11 +53,6 @@ public class HandlerDiscoverer extends AbstractGatewayDiscoverer { return handlerFunction; } - @Deprecated - public List> getFilters() { - return getHigherPrecedenceFilters(); - } - public List> getLowerPrecedenceFilters() { return lowerPrecedenceFilters; } diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerFunctions.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerFunctions.java index 14ea609c..2a919652 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerFunctions.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/HandlerFunctions.java @@ -17,9 +17,6 @@ package org.springframework.cloud.gateway.server.mvc.handler; import java.io.IOException; -import java.lang.reflect.Method; -import java.net.URI; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -140,23 +137,6 @@ public abstract class HandlerFunctions { }); } - // TODO: current discovery only goes by method name - // so last one wins, so put parameterless last - @Deprecated - public static HandlerFunction http(String uri) { - return http(URI.create(uri)); - } - - @Deprecated - public static HandlerFunction http(URI uri) { - return new LookupProxyExchangeHandlerFunction(uri); - } - - @Deprecated - public static HandlerFunction https(URI uri) { - return new LookupProxyExchangeHandlerFunction(uri); - } - public static HandlerFunction https() { return http(); } @@ -171,26 +151,10 @@ public abstract class HandlerFunctions { static class LookupProxyExchangeHandlerFunction implements HandlerFunction { - @Deprecated - private final URI uri; - private AtomicReference proxyExchangeHandlerFunction = new AtomicReference<>(); - LookupProxyExchangeHandlerFunction() { - this.uri = null; - } - - @Deprecated - LookupProxyExchangeHandlerFunction(URI uri) { - this.uri = uri; - } - @Override public ServerResponse handle(ServerRequest serverRequest) { - if (uri != null) { - // TODO: log warning of deprecated usage - MvcUtils.setRequestUrl(serverRequest, uri); - } return proxyExchangeHandlerFunction.updateAndGet(function -> { if (function == null) { return lookup(serverRequest); @@ -214,15 +178,4 @@ public abstract class HandlerFunctions { } - @Deprecated - public static class HandlerSupplier - implements org.springframework.cloud.gateway.server.mvc.handler.HandlerSupplier { - - @Override - public Collection get() { - return Collections.emptyList(); - } - - } - } diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/RestClientProxyExchange.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/RestClientProxyExchange.java index 315a061f..01abf503 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/RestClientProxyExchange.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/handler/RestClientProxyExchange.java @@ -33,12 +33,6 @@ public class RestClientProxyExchange extends AbstractProxyExchange { private final RestClient restClient; - @Deprecated - public RestClientProxyExchange(RestClient restClient) { - super(new GatewayMvcProperties()); - this.restClient = restClient; - } - public RestClientProxyExchange(RestClient restClient, GatewayMvcProperties properties) { super(properties); this.restClient = restClient; diff --git a/spring-cloud-gateway-server-mvc/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-server-mvc/src/main/resources/META-INF/spring.factories index 6ce983dc..dc9d810c 100644 --- a/spring-cloud-gateway-server-mvc/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-gateway-server-mvc/src/main/resources/META-INF/spring.factories @@ -17,8 +17,4 @@ org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.cloud.gateway.server.mvc.GatewayServerMvcAutoConfiguration.GatewayHttpClientEnvironmentPostProcessor,\ - org.springframework.cloud.gateway.server.mvc.common.MultipartEnvironmentPostProcessor - -# Application Listeners -org.springframework.context.ApplicationListener=\ - org.springframework.cloud.gateway.server.mvc.config.GatewayServerWebMvcPropertiesMigrationListener \ No newline at end of file + org.springframework.cloud.gateway.server.mvc.common.MultipartEnvironmentPostProcessor \ No newline at end of file diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayMvcPropertiesMigrationTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayMvcPropertiesMigrationTests.java deleted file mode 100644 index 49105fe3..00000000 --- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayMvcPropertiesMigrationTests.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2013-2023 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.gateway.server.mvc; - -import org.junit.jupiter.api.Test; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.cloud.gateway.server.mvc.config.GatewayMvcProperties; -import org.springframework.cloud.gateway.server.mvc.filter.FormFilter; -import org.springframework.cloud.gateway.server.mvc.filter.ForwardedRequestHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.RemoveContentLengthRequestHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.RemoveHopByHopRequestHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.RemoveHopByHopResponseHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.RemoveHttp2StatusResponseHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.TransferEncodingNormalizationRequestHeadersFilter; -import org.springframework.cloud.gateway.server.mvc.filter.WeightCalculatorFilter; -import org.springframework.cloud.gateway.server.mvc.filter.XForwardedRequestHeadersFilter; -import org.springframework.context.ApplicationContext; -import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; - -import static org.assertj.core.api.Assertions.assertThat; - -@SuppressWarnings("unchecked") -@SpringBootTest(properties = {}, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("propertiesmigrationtests") -public class GatewayMvcPropertiesMigrationTests { - - @Autowired - ApplicationContext context; - - @Autowired - GatewayMvcProperties properties; - - @SuppressWarnings("rawtypes") - @Test - public void deprecatedFilterEnabledPropertiesWork() { - assertBeanDoesNotExist(FormFilter.class); - assertBeanDoesNotExist(ForwardedRequestHeadersFilter.class); - assertBeanDoesNotExist(RemoveContentLengthRequestHeadersFilter.class); - assertBeanDoesNotExist(RemoveHopByHopRequestHeadersFilter.class); - assertBeanDoesNotExist(RemoveHopByHopResponseHeadersFilter.class); - assertBeanDoesNotExist(RemoveHttp2StatusResponseHeadersFilter.class); - assertBeanDoesNotExist(TransferEncodingNormalizationRequestHeadersFilter.class); - assertBeanDoesNotExist(WeightCalculatorFilter.class); - assertBeanDoesNotExist(XForwardedRequestHeadersFilter.class); - } - - @Test - public void deprecatedRoutePropertiesWork() { - assertThat(properties.getRoutes()).hasSize(2); - assertThat(properties.getRoutesMap()).hasSize(2); - } - - @Test - public void deprecatedStreamingMediaTypesWork() { - assertThat(properties.getStreamingMediaTypes()).hasSize(1) - .containsOnly(new MediaType("application", "activemessage")); - } - - private void assertBeanDoesNotExist(Class type) { - assertThat(context.getBeanNamesForType(type)).isEmpty(); - } - - @SpringBootConfiguration - @EnableAutoConfiguration - protected static class TestConfiguration { - - } - -} diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/test/client/ExchangeResult.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/test/client/ExchangeResult.java index e87ea133..e33e653b 100644 --- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/test/client/ExchangeResult.java +++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/test/client/ExchangeResult.java @@ -181,16 +181,6 @@ public class ExchangeResult { return this.response.getStatusCode(); } - /** - * Return the HTTP status code as an integer. - * @since 5.1.10 - * @deprecated as of 6.0, in favor of {@link #getStatus()} - */ - @Deprecated(since = "6.0", forRemoval = true) - public int getRawStatusCode() { - return getStatus().value(); - } - /** * Return the response headers received from the server. */ diff --git a/spring-cloud-gateway-server-mvc/src/test/resources/application-lb.yml b/spring-cloud-gateway-server-mvc/src/test/resources/application-lb.yml index 9d0437b3..20db8521 100644 --- a/spring-cloud-gateway-server-mvc/src/test/resources/application-lb.yml +++ b/spring-cloud-gateway-server-mvc/src/test/resources/application-lb.yml @@ -1,7 +1,7 @@ spring: cloud: gateway: - mvc: + server.webmvc: routes: - id: test uri: lb://httpbin diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java index 77c4f846..d88670ee 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java @@ -92,15 +92,6 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis private final SimpleMetadataReaderFactory simpleMetadataReaderFactory = new SimpleMetadataReaderFactory(); - @Deprecated - public AbstractGatewayControllerEndpoint(RouteDefinitionLocator routeDefinitionLocator, - List globalFilters, List gatewayFilters, - List routePredicates, RouteDefinitionWriter routeDefinitionWriter, - RouteLocator routeLocator) { - this(routeDefinitionLocator, globalFilters, gatewayFilters, routePredicates, routeDefinitionWriter, - routeLocator, new WebEndpointProperties()); - } - public AbstractGatewayControllerEndpoint(RouteDefinitionLocator routeDefinitionLocator, List globalFilters, List gatewayFilters, List routePredicates, RouteDefinitionWriter routeDefinitionWriter, diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index ba577195..407cea76 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -213,16 +213,6 @@ public class GatewayAutoConfiguration { return new StringToZonedDateTimeConverter(); } - /** - * @deprecated in favour of - * {@link org.springframework.cloud.gateway.support.config.KeyValueConverter} - */ - @Deprecated - @Bean - public org.springframework.cloud.gateway.support.KeyValueConverter deprecatedKeyValueConverter() { - return new org.springframework.cloud.gateway.support.KeyValueConverter(); - } - @Bean public KeyValueConverter keyValueConverter() { return new KeyValueConverter(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayServerWebfluxPropertiesMigrationListener.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayServerWebfluxPropertiesMigrationListener.java deleted file mode 100644 index d7040fc4..00000000 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayServerWebfluxPropertiesMigrationListener.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright 2013-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. - * 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.gateway.config; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.boot.context.event.ApplicationFailedEvent; -import org.springframework.boot.context.event.ApplicationPreparedEvent; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.boot.context.event.SpringApplicationEvent; -import org.springframework.boot.context.properties.source.ConfigurationProperty; -import org.springframework.boot.context.properties.source.ConfigurationPropertyName; -import org.springframework.boot.context.properties.source.ConfigurationPropertySource; -import org.springframework.boot.context.properties.source.ConfigurationPropertySources; -import org.springframework.boot.context.properties.source.IterableConfigurationPropertySource; -import org.springframework.boot.env.OriginTrackedMapPropertySource; -import org.springframework.boot.origin.Origin; -import org.springframework.boot.origin.OriginTrackedValue; -import org.springframework.boot.origin.PropertySourceOrigin; -import org.springframework.boot.origin.TextResourceOrigin; -import org.springframework.context.ApplicationListener; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.PropertySource; -import org.springframework.util.ClassUtils; -import org.springframework.util.LinkedMultiValueMap; - -class GatewayServerWebfluxPropertiesMigrationListener implements ApplicationListener { - - private static final Log logger = LogFactory.getLog(GatewayServerWebfluxPropertiesMigrationListener.class); - - private static final String PROPERTIES_MIGRATOR_CLASS = "org.springframework.boot.context.properties.migrator.PropertiesMigrationListener"; - - private static final String DEPRECATED_ROOT = "spring.cloud.gateway"; - - private static final String DEPRECATED_ROUTES_LIST_KEY = DEPRECATED_ROOT + ".routes"; - - private static final String DEPRECATED_DEFAULT_FILTERS_KEY = DEPRECATED_ROOT + ".default-filters"; - - private static final String GATEWAY_PROPERTY_SOURCE_PREFIX = "migrategatewayflux"; - - private static final String NEW_ROUTES_LIST_KEY = GatewayProperties.PREFIX + ".routes"; - - private static final String NEW_DEFAULT_FILTERS_KEY = GatewayProperties.PREFIX + ".default-filters"; - - private final List routesMigrations = new ArrayList<>(); - - @Override - public void onApplicationEvent(SpringApplicationEvent event) { - // only run if spring-boot-properties-migrator is on the classpath - if (!ClassUtils.isPresent(PROPERTIES_MIGRATOR_CLASS, null)) { - return; - } - if (event instanceof ApplicationPreparedEvent preparedEvent) { - onApplicationPreparedEvent(preparedEvent); - } - if (event instanceof ApplicationReadyEvent || event instanceof ApplicationFailedEvent) { - logLegacyPropertiesReport(); - } - } - - private void onApplicationPreparedEvent(ApplicationPreparedEvent event) { - // find deprecated keys - ConfigurableEnvironment env = event.getApplicationContext().getEnvironment(); - - ConfigurationPropertySources.get(env).forEach(propertySource -> { - routesMigrations.addAll(migrate(env, propertySource, GATEWAY_PROPERTY_SOURCE_PREFIX + "routes-", - DEPRECATED_ROUTES_LIST_KEY, NEW_ROUTES_LIST_KEY)); - routesMigrations.addAll(migrate(env, propertySource, GATEWAY_PROPERTY_SOURCE_PREFIX + "default-filters-", - DEPRECATED_DEFAULT_FILTERS_KEY, NEW_DEFAULT_FILTERS_KEY)); - }); - } - - private List migrate(ConfigurableEnvironment env, ConfigurationPropertySource propertySource, - String propertySourcePrefix, String deprecatedKey, String newKeyPrefix) { - List migrations = new ArrayList<>(); - - if (propertySource instanceof IterableConfigurationPropertySource iterableSource) { - ConfigurationPropertyName routesParentName = ConfigurationPropertyName.of(deprecatedKey); - List matchingConfigProps = iterableSource.filter(n -> { - if (n.getNumberOfElements() < routesParentName.getNumberOfElements()) { - return false; - } - ConfigurationPropertyName chop = n.chop(routesParentName.getNumberOfElements()); - return routesParentName.equals(chop); - }).stream().toList(); - if (!matchingConfigProps.isEmpty()) { - String originalPropertySourceName; - if (propertySource.getUnderlyingSource() instanceof PropertySource underlyingSource) { - originalPropertySourceName = underlyingSource.getName(); - } - else { - originalPropertySourceName = propertySource.getUnderlyingSource().toString(); - } - String newPropertySourceName = propertySourcePrefix + originalPropertySourceName; - Map content = new LinkedHashMap<>(); - // migrate to new keys - for (ConfigurationPropertyName originalPropertyName : matchingConfigProps) { - ConfigurationPropertyName suffix = originalPropertyName - .subName(routesParentName.getNumberOfElements()); - ConfigurationPropertyName newProperty = ConfigurationPropertyName.of(newKeyPrefix).append(suffix); - ConfigurationProperty configurationProperty = propertySource - .getConfigurationProperty(originalPropertyName); - Object value = configurationProperty.getValue(); - OriginTrackedValue originTrackedValue = OriginTrackedValue.of(value, - configurationProperty.getOrigin()); - content.put(newProperty.toString(), originTrackedValue); - migrations.add(new Migration(originalPropertySourceName, originalPropertyName, - configurationProperty, newProperty)); - } - env.getPropertySources() - .addBefore(originalPropertySourceName, - new OriginTrackedMapPropertySource(newPropertySourceName, content)); - } - } - return migrations; - } - - private void logLegacyPropertiesReport() { - // log warnings - if (!routesMigrations.isEmpty()) { - LinkedMultiValueMap content = new LinkedMultiValueMap<>(); - routesMigrations.forEach(migration -> content.add(migration.originalPropertySourceName(), migration)); - - StringBuilder report = new StringBuilder(); - report.append(String - .format("%nThe use of configuration keys that have been renamed was found in the environment:%n%n")); - - content.forEach((name, properties) -> { - report.append(String.format("Property source '%s':%n", name)); - // properties.sort(PropertyMigration.COMPARATOR); - properties.forEach((property) -> { - ConfigurationPropertyName originalPropertyName = property.originalPropertyName(); - report.append(String.format("\tKey: %s%n", originalPropertyName)); - Integer lineNumber = property.determineLineNumber(); - if (lineNumber != null) { - report.append(String.format("\t\tLine: %d%n", lineNumber)); - } - report.append(String.format("\t\tReplacement: %s%n", property.newProperty().toString())); - }); - report.append(String.format("%n")); - }); - - report.append(String.format("%n")); - report.append("Each configuration key has been temporarily mapped to its " - + "replacement for your convenience. To silence this warning, please " - + "update your configuration to use the new keys."); - report.append(String.format("%n")); - logger.warn(report.toString()); - } - } - - private record Migration(String originalPropertySourceName, ConfigurationPropertyName originalPropertyName, - ConfigurationProperty originalProperty, ConfigurationPropertyName newProperty) { - - private Integer determineLineNumber() { - Origin origin = originalProperty.getOrigin(); - if (origin instanceof PropertySourceOrigin propertySourceOrigin) { - origin = propertySourceOrigin.getOrigin(); - } - if (origin instanceof TextResourceOrigin textOrigin) { - if (textOrigin.getLocation() != null) { - return textOrigin.getLocation().getLine() + 1; - } - } - return null; - } - } - -} diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/LocalResponseCacheAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/LocalResponseCacheAutoConfiguration.java index 71e2641c..a989d710 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/LocalResponseCacheAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/LocalResponseCacheAutoConfiguration.java @@ -89,15 +89,6 @@ public class LocalResponseCacheAutoConfiguration { return new CacheKeyGenerator(); } - /** - * @deprecated since 4.1.2 for removal in 4.2.0 in favor of - * {@link LocalResponseCacheUtils#createGatewayCacheManager(LocalResponseCacheProperties)} - */ - @Deprecated(since = "4.1.2", forRemoval = true) - public static CaffeineCacheManager createGatewayCacheManager(LocalResponseCacheProperties cacheProperties) { - return LocalResponseCacheUtils.createGatewayCacheManager(cacheProperties); - } - Cache responseCache(CacheManager cacheManager) { return cacheManager.getCache(RESPONSE_CACHE_NAME); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java index de04cbe8..32944dd8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java @@ -72,17 +72,6 @@ public class ReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { private final GatewayLoadBalancerProperties properties; - /** - * @deprecated in favour of - * {@link ReactiveLoadBalancerClientFilter#ReactiveLoadBalancerClientFilter(LoadBalancerClientFactory, GatewayLoadBalancerProperties)} - */ - @Deprecated - public ReactiveLoadBalancerClientFilter(LoadBalancerClientFactory clientFactory, - GatewayLoadBalancerProperties properties, LoadBalancerProperties loadBalancerProperties) { - this.clientFactory = clientFactory; - this.properties = properties; - } - public ReactiveLoadBalancerClientFilter(LoadBalancerClientFactory clientFactory, GatewayLoadBalancerProperties properties) { this.clientFactory = clientFactory; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java deleted file mode 100644 index 10892d7d..00000000 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2013-2020 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.gateway.filter; - -import java.net.URI; -import java.util.List; - -import reactor.core.publisher.Mono; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter; -import org.springframework.core.Ordered; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.web.reactive.function.BodyInserters; -import org.springframework.web.reactive.function.client.WebClient; -import org.springframework.web.reactive.function.client.WebClient.RequestBodySpec; -import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec; -import org.springframework.web.server.ServerWebExchange; - -import static org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter.filterRequest; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.PRESERVE_HOST_HEADER_ATTRIBUTE; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.isAlreadyRouted; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.setAlreadyRouted; - -/** - * @author Spencer Gibb - * @deprecated for removal in 5.0 - */ -@Deprecated -public class WebClientHttpRoutingFilter implements GlobalFilter, Ordered { - - private final WebClient webClient; - - private final ObjectProvider> headersFiltersProvider; - - // do not use this headersFilters directly, use getHeadersFilters() instead. - private volatile List headersFilters; - - public WebClientHttpRoutingFilter(WebClient webClient, - ObjectProvider> headersFiltersProvider) { - this.webClient = webClient; - this.headersFiltersProvider = headersFiltersProvider; - } - - public List getHeadersFilters() { - if (headersFilters == null) { - headersFilters = headersFiltersProvider.getIfAvailable(); - } - return headersFilters; - } - - @Override - public int getOrder() { - return Ordered.LOWEST_PRECEDENCE; - } - - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - - String scheme = requestUrl.getScheme(); - if (isAlreadyRouted(exchange) || (!"http".equals(scheme) && !"https".equals(scheme))) { - return chain.filter(exchange); - } - setAlreadyRouted(exchange); - - ServerHttpRequest request = exchange.getRequest(); - - HttpMethod method = request.getMethod(); - - HttpHeaders filteredHeaders = filterRequest(getHeadersFilters(), exchange); - - boolean preserveHost = exchange.getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); - - RequestBodySpec bodySpec = this.webClient.method(method).uri(requestUrl).headers(httpHeaders -> { - httpHeaders.addAll(filteredHeaders); - // TODO: can this support preserviceHostHeader? - if (!preserveHost) { - httpHeaders.remove(HttpHeaders.HOST); - } - }); - - RequestHeadersSpec headersSpec; - if (requiresBody(method)) { - headersSpec = bodySpec.body(BodyInserters.fromDataBuffers(request.getBody())); - } - else { - headersSpec = bodySpec; - } - - return headersSpec.exchangeToMono(Mono::just) - // .log("webClient route") - .flatMap(res -> { - ServerHttpResponse response = exchange.getResponse(); - response.getHeaders().putAll(res.headers().asHttpHeaders()); - response.setStatusCode(res.statusCode()); - // Defer committing the response until all route filters have run - // Put client response as ServerWebExchange attribute and write - // response later NettyWriteResponseFilter - exchange.getAttributes().put(CLIENT_RESPONSE_ATTR, res); - return chain.filter(exchange); - }); - } - - private boolean requiresBody(HttpMethod method) { - return method.equals(HttpMethod.PUT) || method.equals(HttpMethod.POST) || method.equals(HttpMethod.PATCH); - } - -} diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java deleted file mode 100644 index 35009fd7..00000000 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2013-2020 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.gateway.filter; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import reactor.core.publisher.Mono; - -import org.springframework.core.Ordered; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.web.reactive.function.BodyExtractors; -import org.springframework.web.reactive.function.client.ClientResponse; -import org.springframework.web.server.ServerWebExchange; - -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR; - -/** - * @author Spencer Gibb - * @deprecated for removal in 5.0 - */ -@Deprecated -public class WebClientWriteResponseFilter implements GlobalFilter, Ordered { - - /** - * Order of Write Response Filter. - */ - public static final int WRITE_RESPONSE_FILTER_ORDER = -1; - - private static final Log log = LogFactory.getLog(WebClientWriteResponseFilter.class); - - @Override - public int getOrder() { - return WRITE_RESPONSE_FILTER_ORDER; - } - - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - // NOTICE: nothing in "pre" filter stage as CLIENT_RESPONSE_ATTR is not added - // until the WebHandler is run - return chain.filter(exchange).doOnError(throwable -> cleanup(exchange)).then(Mono.defer(() -> { - ClientResponse clientResponse = exchange.getAttribute(CLIENT_RESPONSE_ATTR); - if (clientResponse == null) { - return Mono.empty(); - } - log.trace("WebClientWriteResponseFilter start"); - ServerHttpResponse response = exchange.getResponse(); - - return response.writeWith(clientResponse.body(BodyExtractors.toDataBuffers())) - // .log("webClient response") - .doOnCancel(() -> cleanup(exchange)); - })); - } - - private void cleanup(ServerWebExchange exchange) { - ClientResponse clientResponse = exchange.getAttribute(CLIENT_RESPONSE_ATTR); - if (clientResponse != null) { - clientResponse.bodyToMono(Void.class).subscribe(); - } - } - -} diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java index 61a79ff8..161c522b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicBoolean; @@ -103,12 +102,6 @@ public class WeightCalculatorWebFilter implements WebFilter, Ordered, SmartAppli this.order = order; } - @Deprecated - public void setRandom(Random random) { - Assert.notNull(random, "random may not be null"); - this.randomFunction = exchange -> random.nextDouble(); - } - public void setRandomSupplier(Supplier randomSupplier) { Assert.notNull(randomSupplier, "randomSupplier may not be null"); this.randomFunction = exchange -> randomSupplier.get(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java index d206b10b..2e1c741e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java @@ -28,6 +28,8 @@ import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; +import org.springframework.cloud.gateway.support.config.KeyValue; +import org.springframework.cloud.gateway.support.config.KeyValueConfig; import org.springframework.core.style.ToStringCreator; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.util.StringUtils; @@ -41,8 +43,7 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi * * @author Abel Salgado Romero */ -public class AddRequestHeadersIfNotPresentGatewayFilterFactory - extends AbstractGatewayFilterFactory { +public class AddRequestHeadersIfNotPresentGatewayFilterFactory extends AbstractGatewayFilterFactory { @Override public GatewayFilter apply(KeyValueConfig config) { @@ -126,54 +127,4 @@ public class AddRequestHeadersIfNotPresentGatewayFilterFactory return KeyValueConfig.class; } - /** - * @deprecated in favour of - * {@link org.springframework.cloud.gateway.support.config.KeyValueConfig} - */ - @Deprecated - public static class KeyValueConfig { - - private KeyValue[] keyValues; - - public KeyValue[] getKeyValues() { - return keyValues; - } - - public void setKeyValues(KeyValue[] keyValues) { - this.keyValues = keyValues; - } - - } - - /** - * @deprecated in favour of - * {@link org.springframework.cloud.gateway.support.config.KeyValue} - */ - @Deprecated - public static class KeyValue { - - private final String key; - - private final String value; - - public KeyValue(String key, String value) { - this.key = key; - this.value = value; - } - - public String getKey() { - return key; - } - - public String getValue() { - return value; - } - - @Override - public String toString() { - return new ToStringCreator(this).append("name", key).append("value", value).toString(); - } - - } - } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java index c0ecaee2..56c27a73 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java @@ -73,11 +73,6 @@ public class RewriteResponseHeaderGatewayFilterFactory }; } - @Deprecated - protected void rewriteHeader(ServerWebExchange exchange, Config config) { - rewriteHeaders(exchange, config); - } - protected void rewriteHeaders(ServerWebExchange exchange, Config config) { final String name = config.getName(); final HttpHeaders responseHeaders = exchange.getResponse().getHeaders(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/GlobalLocalResponseCacheGatewayFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/GlobalLocalResponseCacheGatewayFilter.java index 75f74ca3..953f93e3 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/GlobalLocalResponseCacheGatewayFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/GlobalLocalResponseCacheGatewayFilter.java @@ -40,13 +40,6 @@ public class GlobalLocalResponseCacheGatewayFilter implements GlobalFilter, Orde private final ResponseCacheGatewayFilter responseCacheGatewayFilter; - @Deprecated - public GlobalLocalResponseCacheGatewayFilter(ResponseCacheManagerFactory cacheManagerFactory, Cache globalCache, - Duration configuredTimeToLive) { - responseCacheGatewayFilter = new ResponseCacheGatewayFilter( - cacheManagerFactory.create(globalCache, configuredTimeToLive)); - } - public GlobalLocalResponseCacheGatewayFilter(ResponseCacheManagerFactory cacheManagerFactory, Cache globalCache, Duration configuredTimeToLive, LocalResponseCacheProperties.RequestOptions requestOptions) { responseCacheGatewayFilter = new ResponseCacheGatewayFilter( diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/LocalResponseCacheGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/LocalResponseCacheGatewayFilterFactory.java index c28a00e4..9ebc3c76 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/LocalResponseCacheGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/LocalResponseCacheGatewayFilterFactory.java @@ -61,12 +61,6 @@ public class LocalResponseCacheGatewayFilterFactory private final CaffeineCacheManager caffeineCacheManager; - @Deprecated - public LocalResponseCacheGatewayFilterFactory(ResponseCacheManagerFactory cacheManagerFactory, - Duration defaultTimeToLive, DataSize defaultSize) { - this(cacheManagerFactory, defaultTimeToLive, defaultSize, new RequestOptions()); - } - public LocalResponseCacheGatewayFilterFactory(ResponseCacheManagerFactory cacheManagerFactory, Duration defaultTimeToLive, DataSize defaultSize, RequestOptions requestOptions) { this(cacheManagerFactory, defaultTimeToLive, defaultSize, requestOptions, new CaffeineCacheManager()); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java index 1a5471f5..a122a135 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java @@ -69,11 +69,6 @@ public class ResponseCacheManager { private final boolean ignoreNoCacheUpdate; - @Deprecated - public ResponseCacheManager(CacheKeyGenerator cacheKeyGenerator, Cache cache, Duration configuredTimeToLive) { - this(cacheKeyGenerator, cache, configuredTimeToLive, new RequestOptions()); - } - public ResponseCacheManager(CacheKeyGenerator cacheKeyGenerator, Cache cache, Duration configuredTimeToLive, RequestOptions requestOptions) { this.cacheKeyGenerator = cacheKeyGenerator; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManagerFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManagerFactory.java index 1030070b..ae53632e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManagerFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManagerFactory.java @@ -33,11 +33,6 @@ public class ResponseCacheManagerFactory { this.cacheKeyGenerator = cacheKeyGenerator; } - @Deprecated - public ResponseCacheManager create(Cache cache, Duration timeToLive) { - return new ResponseCacheManager(cacheKeyGenerator, cache, timeToLive); - } - public ResponseCacheManager create(Cache cache, Duration timeToLive, LocalResponseCacheProperties.RequestOptions requestOptions) { return new ResponseCacheManager(cacheKeyGenerator, cache, timeToLive, requestOptions); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java index acc2619e..20711463 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java @@ -62,11 +62,6 @@ public class FilteringWebHandler implements WebHandler, ApplicationListener globalFilters) { - this(globalFilters, false); - } - public FilteringWebHandler(List globalFilters, boolean routeFilterCacheEnabled) { this.globalFilters = loadFilters(globalFilters); this.routeFilterCacheEnabled = routeFilterCacheEnabled; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java index 5993cac1..6b503092 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java @@ -55,15 +55,6 @@ public class PathRoutePredicateFactory extends AbstractRoutePredicateFactory { - - private static final String INVALID_CONFIGURATION_MESSAGE = "Invalid configuration, expected format is: 'key:value', received: "; - - @Override - public KeyValue convert(String source) throws IllegalArgumentException { - try { - String[] split = source.split(":"); - if (split.length == 2) { - return new KeyValue(split[0], split.length == 1 ? "" : split[1]); - } - throw new IllegalArgumentException(INVALID_CONFIGURATION_MESSAGE + source); - } - catch (ArrayIndexOutOfBoundsException e) { - throw new IllegalArgumentException(INVALID_CONFIGURATION_MESSAGE + source); - } - } - -} diff --git a/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index ed06fd73..49f8477b 100644 --- a/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -215,12 +215,6 @@ "description": "Enables the circuit-breaker filter.", "defaultValue": "true" }, - { - "name": "spring.cloud.gateway.server.webflux.filter.hystrix.enabled", - "type": "java.lang.Boolean", - "description": "Enables the hystrix filter.", - "defaultValue": "true" - }, { "name": "spring.cloud.gateway.server.webflux.filter.fallback-headers.enabled", "type": "java.lang.Boolean", @@ -442,2008 +436,6 @@ "type": "java.lang.Boolean", "description": "If RedisRouteDefinitionRepository should be enabled.", "defaultValue": "true" - }, - { - "name": "spring.cloud.gateway", - "type": "org.springframework.cloud.gateway.config.GatewayProperties", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator", - "type": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache", - "type": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties", - "sourceType": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache.request", - "type": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties$RequestOptions", - "sourceType": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache.request", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-hop-by-hop", - "type": "org.springframework.cloud.gateway.filter.headers.RemoveHopByHopHeadersFilter", - "sourceType": "org.springframework.cloud.gateway.filter.headers.RemoveHopByHopHeadersFilter", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-hop-by-hop", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-rate-limiter", - "type": "org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilterFactory", - "sourceType": "org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilterFactory", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-rate-limiter", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers", - "type": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.globalcors", - "type": "org.springframework.cloud.gateway.config.GlobalCorsProperties", - "sourceType": "org.springframework.cloud.gateway.config.GlobalCorsProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.globalcors", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.websocket", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Websocket", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.websocket", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.loadbalancer", - "type": "org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties", - "sourceType": "org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.loadbalancer", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.metrics", - "type": "org.springframework.cloud.gateway.config.GatewayMetricsProperties", - "sourceType": "org.springframework.cloud.gateway.config.GatewayMetricsProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.metrics", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter", - "type": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.set-status", - "type": "org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.set-status", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded", - "type": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.default-filters", - "type": "java.util.List", - "description": "List of filter definitions that are applied to every route.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.default-filters", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.enabled", - "type": "java.lang.Boolean", - "description": "Flag that enables DiscoveryClient gateway integration.", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.filters", - "type": "java.util.List", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.filters", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.include-expression", - "type": "java.lang.String", - "description": "SpEL expression that will evaluate whether to include a service in gateway integration or not, defaults to: true.", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.include-expression", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.lower-case-service-id", - "type": "java.lang.Boolean", - "description": "Option to lower case serviceId in predicates and filters, defaults to false. Useful with eureka when it automatically uppercases serviceId. so MYSERIVCE, would match \/myservice\/**", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.lower-case-service-id", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.predicates", - "type": "java.util.List", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.predicates", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.route-id-prefix", - "type": "java.lang.String", - "description": "The prefix for the routeId, defaults to discoveryClient.getClass().getSimpleName() + \"_\". Service Id will be appended to create the routeId.", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.route-id-prefix", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.discovery.locator.url-expression", - "type": "java.lang.String", - "description": "SpEL expression that create the uri for each route, defaults to: 'lb:\/\/'+serviceId.", - "sourceType": "org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties", - "defaultValue": "'lb:\/\/'+serviceId", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.discovery.locator.url-expression", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.enabled", - "type": "java.lang.Boolean", - "description": "Enables gateway functionality.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.fail-on-route-definition-error", - "type": "java.lang.Boolean", - "description": "Option to fail on route definition errors, defaults to true. Otherwise, a warning is logged.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.fail-on-route-definition-error", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.add-request-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the add-request-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.add-request-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.add-request-parameter.enabled", - "type": "java.lang.Boolean", - "description": "Enables the add-request-parameter filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.add-request-parameter.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.add-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the add-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.add-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.circuit-breaker.enabled", - "type": "java.lang.Boolean", - "description": "Enables the circuit-breaker filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.circuit-breaker.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.dedupe-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the dedupe-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.dedupe-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.fallback-headers.enabled", - "type": "java.lang.Boolean", - "description": "Enables the fallback-headers filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.fallback-headers.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.hystrix.enabled", - "type": "java.lang.Boolean", - "description": "Enables the hystrix filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.hystrix.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.json-to-grpc.enabled", - "type": "java.lang.Boolean", - "description": "Enables the JSON to gRPC filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.json-to-grpc.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache.enabled", - "type": "java.lang.Boolean", - "description": "Enables the local-response-cache filter.", - "defaultValue": "false", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy", - "type": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties$NoCacheStrategy", - "sourceType": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties$RequestOptions", - "defaultValue": "skip-update-cache-entry", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache.request.no-cache-strategy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache.size", - "type": "org.springframework.util.unit.DataSize", - "description": "Maximum size of the cache to evict entries for this route (in KB, MB and GB).", - "sourceType": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache.size", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.local-response-cache.time-to-live", - "type": "java.time.Duration", - "description": "Time to expire a cache entry (expressed in s for seconds, m for minutes, and h for hours).", - "sourceType": "org.springframework.cloud.gateway.filter.factory.cache.LocalResponseCacheProperties", - "defaultValue": "5m", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.local-response-cache.time-to-live", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.map-request-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the map-request-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.map-request-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.modify-request-body.enabled", - "type": "java.lang.Boolean", - "description": "Enables the modify-request-body filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.modify-request-body.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.modify-response-body.enabled", - "type": "java.lang.Boolean", - "description": "Enables the modify-response-body filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.modify-response-body.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.prefix-path.enabled", - "type": "java.lang.Boolean", - "description": "Enables the prefix-path filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.prefix-path.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.preserve-host-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the preserve-host-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.preserve-host-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.redirect-to.enabled", - "type": "java.lang.Boolean", - "description": "Enables the redirect-to filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.redirect-to.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-hop-by-hop.headers", - "type": "java.util.Set", - "sourceType": "org.springframework.cloud.gateway.filter.headers.RemoveHopByHopHeadersFilter", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-hop-by-hop.headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-hop-by-hop.order", - "type": "java.lang.Integer", - "sourceType": "org.springframework.cloud.gateway.filter.headers.RemoveHopByHopHeadersFilter", - "defaultValue": 0, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-hop-by-hop.order", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-request-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the remove-request-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-request-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-request-parameter.enabled", - "type": "java.lang.Boolean", - "description": "Enables the remove-request-parameter filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-request-parameter.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.remove-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the remove-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.remove-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-header-size.enabled", - "type": "java.lang.Boolean", - "description": "Enables the request-header-size filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-header-size.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-header-to-request-uri.enabled", - "type": "java.lang.Boolean", - "description": "Enables the request-header-to-request-uri filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-header-to-request-uri.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-rate-limiter.default-key-resolver", - "type": "org.springframework.cloud.gateway.filter.ratelimit.KeyResolver", - "sourceType": "org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilterFactory", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-rate-limiter.default-key-resolver", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-rate-limiter.default-rate-limiter", - "type": "org.springframework.cloud.gateway.filter.ratelimit.RateLimiter", - "sourceType": "org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilterFactory", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-rate-limiter.default-rate-limiter", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-rate-limiter.enabled", - "type": "java.lang.Boolean", - "description": "Enables the request-rate-limiter filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-rate-limiter.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.request-size.enabled", - "type": "java.lang.Boolean", - "description": "Enables the request-size filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.request-size.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.retry.enabled", - "type": "java.lang.Boolean", - "description": "Enables the retry filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.retry.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.rewrite-location-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the rewrite-location-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.rewrite-location-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.rewrite-location.enabled", - "type": "java.lang.Boolean", - "description": "Enables the rewrite-location filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.rewrite-location.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.rewrite-path.enabled", - "type": "java.lang.Boolean", - "description": "Enables the rewrite-path filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.rewrite-path.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.rewrite-request-parameter.enabled", - "type": "java.lang.Boolean", - "description": "Enables the rewrite-request-parameter filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.rewrite-request-parameter.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.rewrite-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the rewrite-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.rewrite-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.save-session.enabled", - "type": "java.lang.Boolean", - "description": "Enables the save-session filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.save-session.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.content-security-policy", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.content-security-policy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.content-type-options", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "nosniff", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.content-type-options", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.default-headers", - "type": "java.util.Set", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.default-headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.disable", - "type": "java.util.List", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.disable", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.disabled-headers", - "type": "java.util.Set", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.disabled-headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.download-options", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "noopen", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.download-options", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.enabled", - "type": "java.lang.Boolean", - "description": "Enables the secure-headers filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.enabled-headers", - "type": "java.util.Set", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.enabled-headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.frame-options", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "DENY", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.frame-options", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.permissions-policy", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.permissions-policy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "none", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.permitted-cross-domain-policies", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.referrer-policy", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "no-referrer", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.referrer-policy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.strict-transport-security", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "max-age=631138519", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.strict-transport-security", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.secure-headers.xss-protection-header", - "type": "java.lang.String", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties", - "defaultValue": "1 ; mode=block", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.secure-headers.xss-protection-header", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.set-path.enabled", - "type": "java.lang.Boolean", - "description": "Enables the set-path filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.set-path.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.set-request-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the set-request-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.set-request-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.set-request-host-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the set-request-host-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.set-request-host-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.set-response-header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the set-response-header filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.set-response-header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.set-status.enabled", - "type": "java.lang.Boolean", - "description": "Enables the set-status filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.set-status.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.filter.strip-prefix.enabled", - "type": "java.lang.Boolean", - "description": "Enables the strip-prefix filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.filter.strip-prefix.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.forwarded.by.enabled", - "type": "java.lang.Boolean", - "description": "Enables the Forwarded: by header part.", - "defaultValue": "false", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.forwarded.by.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.forwarded.enabled", - "type": "java.lang.Boolean", - "description": "Enables the ForwardedHeadersFilter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.forwarded.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.adapt-cached-body.enabled", - "type": "java.lang.Boolean", - "description": "Enables the adapt-cached-body global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.adapt-cached-body.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.forward-path.enabled", - "type": "java.lang.Boolean", - "description": "Enables the forward-path global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.forward-path.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.forward-routing.enabled", - "type": "java.lang.Boolean", - "description": "Enables the forward-routing global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.forward-routing.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.load-balancer-client.enabled", - "type": "java.lang.Boolean", - "description": "Enables the load-balancer-client global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.load-balancer-client.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.local-response-cache.enabled", - "type": "java.lang.Boolean", - "description": "Enables the local-response-cache filter for all routes, it allows to add a specific configuration at route level using LocalResponseCache filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.local-response-cache.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.netty-routing.enabled", - "type": "java.lang.Boolean", - "description": "Enables the netty-routing global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.netty-routing.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.netty-write-response.enabled", - "type": "java.lang.Boolean", - "description": "Enables the netty-write-response global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.netty-write-response.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled", - "type": "java.lang.Boolean", - "description": "Enables the reactive-load-balancer-client global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.reactive-load-balancer-client.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.remove-cached-body.enabled", - "type": "java.lang.Boolean", - "description": "Enables the remove-cached-body global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.remove-cached-body.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.route-to-request-url.enabled", - "type": "java.lang.Boolean", - "description": "Enables the route-to-request-url global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.route-to-request-url.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.global-filter.websocket-routing.enabled", - "type": "java.lang.Boolean", - "description": "Enables the websocket-routing global filter.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.global-filter.websocket-routing.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping", - "type": "java.lang.Boolean", - "description": "If global CORS config should be added to the URL handler.", - "defaultValue": "false", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.globalcors.add-to-simple-url-handler-mapping", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.globalcors.cors-configurations", - "type": "java.util.Map", - "sourceType": "org.springframework.cloud.gateway.config.GlobalCorsProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.globalcors.cors-configurations", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.handler-mapping.order", - "type": "java.lang.Integer", - "description": "The order of RoutePredicateHandlerMapping.", - "defaultValue": "1", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.handler-mapping.order", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.compression", - "type": "java.lang.Boolean", - "description": "Enables compression for Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.compression", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.connect-timeout", - "type": "java.lang.Integer", - "description": "The connect timeout in millis, the default is 30s.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.connect-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.max-header-size", - "type": "org.springframework.util.unit.DataSize", - "description": "The max response header size.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.max-header-size", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.max-initial-line-length", - "type": "org.springframework.util.unit.DataSize", - "description": "The max initial line length.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.max-initial-line-length", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.acquire-timeout", - "type": "java.lang.Long", - "description": "Only for type FIXED, the maximum time in millis to wait for acquiring.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.acquire-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.eviction-interval", - "type": "java.time.Duration", - "description": "Perform regular eviction checks in the background at a specified interval. Disabled by default ({@link Duration#ZERO})", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "defaultValue": 0, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.eviction-interval", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.leasing-strategy", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool$LeasingStrategy", - "description": "Configures the leasing strategy for the pool (fifo or lifo), defaults to FIFO which is Netty's default.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "defaultValue": "fifo", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.leasing-strategy", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.max-connections", - "type": "java.lang.Integer", - "description": "Only for type FIXED, the maximum number of connections before starting pending acquisition on existing ones.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.max-connections", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.max-idle-time", - "type": "java.time.Duration", - "description": "Time in millis after which the channel will be closed. If NULL, there is no max idle time.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.max-idle-time", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.max-life-time", - "type": "java.time.Duration", - "description": "Duration after which the channel will be closed. If NULL, there is no max life time.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.max-life-time", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.metrics", - "type": "java.lang.Boolean", - "description": "Enables channel pools metrics to be collected and registered in Micrometer. Disabled by default.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.metrics", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.name", - "type": "java.lang.String", - "description": "The channel pool map name, defaults to proxy.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "defaultValue": "proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.name", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.pool.type", - "type": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool$PoolType", - "description": "Type of pool for HttpClient to use (elastic, fixed or disabled).", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Pool", - "defaultValue": "elastic", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.pool.type", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.host", - "type": "java.lang.String", - "description": "Hostname for proxy configuration of Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.host", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.non-proxy-hosts-pattern", - "type": "java.lang.String", - "description": "Regular expression (Java) for a configured list of hosts. that should be reached directly, bypassing the proxy", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.non-proxy-hosts-pattern", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.password", - "type": "java.lang.String", - "description": "Password for proxy configuration of Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.password", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.port", - "type": "java.lang.Integer", - "description": "Port for proxy configuration of Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.port", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.type", - "type": "reactor.netty.transport.ProxyProvider$Proxy", - "description": "proxyType for proxy configuration of Netty HttpClient (http, socks4 or socks5).", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "defaultValue": "http", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.type", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.proxy.username", - "type": "java.lang.String", - "description": "Username for proxy configuration of Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Proxy", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.proxy.username", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.response-timeout", - "type": "java.time.Duration", - "description": "The response timeout.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.response-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout", - "type": "java.time.Duration", - "description": "SSL close_notify flush timeout. Default to 3000 ms.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "defaultValue": "3000ms", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.close-notify-flush-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout", - "type": "java.time.Duration", - "description": "SSL close_notify read timeout. Default to 0 ms.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "defaultValue": 0, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.close-notify-read-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.handshake-timeout", - "type": "java.time.Duration", - "description": "SSL handshake timeout. Default to 10000 ms", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "defaultValue": "10000ms", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.handshake-timeout", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.key-password", - "type": "java.lang.String", - "description": "Key password, default is same as keyStorePassword.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.key-password", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.key-store", - "type": "java.lang.String", - "description": "Keystore path for Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.key-store", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.key-store-password", - "type": "java.lang.String", - "description": "Keystore password.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.key-store-password", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.key-store-provider", - "type": "java.lang.String", - "description": "Keystore provider for Netty HttpClient, optional field.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.key-store-provider", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.key-store-type", - "type": "java.lang.String", - "description": "Keystore type for Netty HttpClient, default is JKS.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "defaultValue": "JKS", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.key-store-type", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.ssl-bundle", - "type": "java.lang.String", - "description": "The name of the SSL bundle to use.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.ssl-bundle", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.trusted-x509-certificates", - "type": "java.util.List", - "description": "Trusted certificates for verifying the remote endpoint's certificate.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.trusted-x509-certificates", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager", - "type": "java.lang.Boolean", - "description": "Installs the netty InsecureTrustManagerFactory. This is insecure and not suitable for production.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Ssl", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.ssl.use-insecure-trust-manager", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.websocket.max-frame-payload-length", - "type": "java.lang.Integer", - "description": "Max frame payload length.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Websocket", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.websocket.max-frame-payload-length", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.websocket.proxy-ping", - "type": "java.lang.Boolean", - "description": "Proxy ping frames to downstream services, defaults to true.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties$Websocket", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.websocket.proxy-ping", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpclient.wiretap", - "type": "java.lang.Boolean", - "description": "Enables wiretap debugging for Netty HttpClient.", - "sourceType": "org.springframework.cloud.gateway.config.HttpClientProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpclient.wiretap", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.httpserver.wiretap", - "type": "java.lang.Boolean", - "description": "Enables wiretap debugging for Netty HttpServer.", - "defaultValue": "false", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.httpserver.wiretap", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.loadbalancer.use404", - "type": "java.lang.Boolean", - "sourceType": "org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.loadbalancer.use404", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.metrics.enabled", - "type": "java.lang.Boolean", - "description": "Enables the collection of metrics data.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayMetricsProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.metrics.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.metrics.prefix", - "type": "java.lang.String", - "description": "The prefix of all metrics emitted by gateway.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayMetricsProperties", - "defaultValue": "spring.cloud.gateway", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.metrics.prefix", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.metrics.tags", - "type": "java.util.Map", - "description": "Tags map that added to metrics.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayMetricsProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.metrics.tags", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.observability.enabled", - "type": "java.lang.Boolean", - "description": "If Micrometer Observability support should be turned on.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.observability.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.after.enabled", - "type": "java.lang.Boolean", - "description": "Enables the after predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.after.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.before.enabled", - "type": "java.lang.Boolean", - "description": "Enables the before predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.before.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.between.enabled", - "type": "java.lang.Boolean", - "description": "Enables the between predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.between.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled", - "type": "java.lang.Boolean", - "description": "Enables the cloud-foundry-route-service predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.cloud-foundry-route-service.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.cookie.enabled", - "type": "java.lang.Boolean", - "description": "Enables the cookie predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.cookie.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.header.enabled", - "type": "java.lang.Boolean", - "description": "Enables the header predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.header.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.host.enabled", - "type": "java.lang.Boolean", - "description": "Enables the host predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.host.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.host.include-port", - "type": "java.lang.Boolean", - "description": "Include the port in matching the host name.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.host.include-port", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.method.enabled", - "type": "java.lang.Boolean", - "description": "Enables the method predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.method.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.path.enabled", - "type": "java.lang.Boolean", - "description": "Enables the path predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.path.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.query.enabled", - "type": "java.lang.Boolean", - "description": "Enables the query predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.query.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.read-body.enabled", - "type": "java.lang.Boolean", - "description": "Enables the read-body predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.read-body.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.remote-addr.enabled", - "type": "java.lang.Boolean", - "description": "Enables the remote-addr predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.remote-addr.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.weight.enabled", - "type": "java.lang.Boolean", - "description": "Enables the weight predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.weight.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled", - "type": "java.lang.Boolean", - "description": "Enables the xforwarded-remote-addr predicate.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.predicate.xforwarded-remote-addr.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.burst-capacity-header", - "type": "java.lang.String", - "description": "The name of the header that returns the burst capacity configuration.", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "defaultValue": "X-RateLimit-Burst-Capacity", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.burst-capacity-header", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.config", - "type": "java.util.Map", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.config", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.include-headers", - "type": "java.lang.Boolean", - "description": "Whether or not to include headers containing rate limiter information, defaults to true.", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.include-headers", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.remaining-header", - "type": "java.lang.String", - "description": "The name of the header that returns number of remaining requests during the current second.", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "defaultValue": "X-RateLimit-Remaining", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.remaining-header", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.replenish-rate-header", - "type": "java.lang.String", - "description": "The name of the header that returns the replenish rate configuration.", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "defaultValue": "X-RateLimit-Replenish-Rate", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.replenish-rate-header", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-rate-limiter.requested-tokens-header", - "type": "java.lang.String", - "description": "The name of the header that returns the requested tokens configuration.", - "sourceType": "org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter", - "defaultValue": "X-RateLimit-Requested-Tokens", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-rate-limiter.requested-tokens-header", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.redis-route-definition-repository.enabled", - "type": "java.lang.Boolean", - "description": "If RedisRouteDefinitionRepository should be enabled.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.redis-route-definition-repository.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.restrictive-property-accessor.enabled", - "type": "java.lang.Boolean", - "description": "Restricts method and property access in SpEL.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.restrictive-property-accessor.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.route-filter-cache-enabled", - "type": "java.lang.Boolean", - "description": "Enables the route filter cache, defaults to false.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "defaultValue": false, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.route-filter-cache-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.route-refresh-listener.enabled", - "type": "java.lang.Boolean", - "description": "If RouteRefreshListener should be turned on.", - "defaultValue": "true", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.route-refresh-listener.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.routes", - "type": "java.util.List", - "description": "List of Routes.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.routes", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.set-status.original-status-header-name", - "type": "java.lang.String", - "description": "The name of the header which contains http code of the proxied request.", - "sourceType": "org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.set-status.original-status-header-name", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.streaming-media-types", - "type": "java.util.List", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.streaming-media-types", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.enabled", - "type": "java.lang.Boolean", - "description": "If the XForwardedHeadersFilter is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.for-append", - "type": "java.lang.Boolean", - "description": "If appending X-Forwarded-For as a list is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.for-append", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.for-enabled", - "type": "java.lang.Boolean", - "description": "If X-Forwarded-For is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.for-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.host-append", - "type": "java.lang.Boolean", - "description": "If appending X-Forwarded-Host as a list is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.host-append", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.host-enabled", - "type": "java.lang.Boolean", - "description": "If X-Forwarded-Host is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.host-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.order", - "type": "java.lang.Integer", - "description": "The order of the XForwardedHeadersFilter.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": 0, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.order", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.port-append", - "type": "java.lang.Boolean", - "description": "If appending X-Forwarded-Port as a list is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.port-append", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.port-enabled", - "type": "java.lang.Boolean", - "description": "If X-Forwarded-Port is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.port-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.prefix-append", - "type": "java.lang.Boolean", - "description": "If appending X-Forwarded-Prefix as a list is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.prefix-append", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.prefix-enabled", - "type": "java.lang.Boolean", - "description": "If X-Forwarded-Prefix is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.prefix-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.proto-append", - "type": "java.lang.Boolean", - "description": "If appending X-Forwarded-Proto as a list is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.proto-append", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.x-forwarded.proto-enabled", - "type": "java.lang.Boolean", - "description": "If X-Forwarded-Proto is enabled.", - "sourceType": "org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.x-forwarded.proto-enabled", - "since": "4.3.0" - } - }, - { - "name": "spring.cloud.gateway.trusted-proxies", - "type": "java.lang.String", - "description": "Regular expression defining proxies that are trusted when they appear in a Forwarded or X-Forwarded header.", - "sourceType": "org.springframework.cloud.gateway.config.GatewayProperties", - "defaultValue": true, - "deprecated": true, - "deprecation": { - "replacement": "spring.cloud.gateway.server.webflux.trusted-proxies", - "since": "4.3.0" - } } ] } diff --git a/spring-cloud-gateway-server/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-server/src/main/resources/META-INF/spring.factories index 38fc4166..dd7e5a51 100644 --- a/spring-cloud-gateway-server/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-gateway-server/src/main/resources/META-INF/spring.factories @@ -3,8 +3,4 @@ org.springframework.cloud.gateway.config.GatewayEnvironmentPostProcessor # Failure Analyzers org.springframework.boot.diagnostics.FailureAnalyzer=\ -org.springframework.cloud.gateway.support.MvcFoundOnClasspathFailureAnalyzer - -# Application Listeners -org.springframework.context.ApplicationListener=\ - org.springframework.cloud.gateway.config.GatewayServerWebfluxPropertiesMigrationListener \ No newline at end of file +org.springframework.cloud.gateway.support.MvcFoundOnClasspathFailureAnalyzer \ No newline at end of file diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java index e06d7226..d88a3be4 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java @@ -133,7 +133,7 @@ public class GatewayMetricsAutoConfigurationTests { @Nested @SpringBootTest(classes = CustomTagsProviderConfig.class, - properties = "spring.cloud.gateway.metrics.prefix=myprefix.") + properties = "spring.cloud.gateway.server.webflux.metrics.prefix=myprefix.") public class AddCustomTagsProvider { @Autowired(required = false) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayPropertiesMigrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayPropertiesMigrationTests.java deleted file mode 100644 index b1ec4a8a..00000000 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayPropertiesMigrationTests.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2013-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. - * 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.gateway.config; - -import org.junit.jupiter.api.Test; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.cloud.gateway.filter.factory.AddRequestParameterGatewayFilterFactory; -import org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter; -import org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter; -import org.springframework.cloud.gateway.handler.predicate.AfterRoutePredicateFactory; -import org.springframework.cloud.gateway.route.RouteRefreshListener; -import org.springframework.context.ApplicationContext; -import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; - -import static org.assertj.core.api.Assertions.assertThat; - -@SuppressWarnings("unchecked") -@SpringBootTest(properties = { "debug=true" }, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("propertiesmigrationtests") -public class GatewayPropertiesMigrationTests { - - @Autowired - ApplicationContext context; - - @Autowired - GatewayProperties properties; - - @Test - public void deprecatedPropertiesWork() { - assertBeanDoesNotExist(AddRequestParameterGatewayFilterFactory.class); - assertBeanDoesNotExist(AfterRoutePredicateFactory.class); - assertBeanDoesNotExist(ForwardedHeadersFilter.class); - assertBeanDoesNotExist(RouteRefreshListener.class); - assertBeanDoesNotExist(XForwardedHeadersFilter.class); - } - - @Test - public void deprecatedRoutePropertiesWork() { - assertThat(properties.getRoutes()).hasSize(2); - } - - @Test - public void deprecatedDefaultFiltersPropertiesWork() { - assertThat(properties.getDefaultFilters()).hasSize(2); - assertThat(properties.getDefaultFilters().get(0).getName()).isEqualTo("AddRequestHeader"); - assertThat(properties.getDefaultFilters().get(1).getName()).isEqualTo("AddRequestHeader"); - } - - @Test - public void deprecatedStreamingMediaTypesWork() { - assertThat(properties.getStreamingMediaTypes()).hasSize(1) - .containsOnly(new MediaType("application", "activemessage")); - } - - private void assertBeanDoesNotExist(Class type) { - assertThat(context.getBeanNamesForType(type)).isEmpty(); - } - - @SpringBootConfiguration - @EnableAutoConfiguration - protected static class TestConfiguration { - - } - -} diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactoryTests.java index 6b5ffaa7..5ab92ada 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactoryTests.java @@ -26,10 +26,10 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.gateway.filter.GatewayFilter; -import org.springframework.cloud.gateway.filter.factory.AddRequestHeadersIfNotPresentGatewayFilterFactory.KeyValue; -import org.springframework.cloud.gateway.filter.factory.AddRequestHeadersIfNotPresentGatewayFilterFactory.KeyValueConfig; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.cloud.gateway.support.config.KeyValue; +import org.springframework.cloud.gateway.support.config.KeyValueConfig; import org.springframework.cloud.gateway.test.BaseWebClientTests; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java index c4ef97cf..de259829 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; import org.reactivestreams.Publisher; import reactor.core.publisher.Mono; -import org.springframework.cloud.gateway.webflux.config.ProxyProperties; +import org.springframework.cloud.gateway.webflux.config.ProxyExchangeWebfluxProperties; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; @@ -115,9 +115,9 @@ public class ProxyExchange { /** * Contains headers that are considered case-sensitive by default. - * @deprecated {@link ProxyProperties#DEFAULT_SENSITIVE} + * @deprecated {@link ProxyExchangeWebfluxProperties#DEFAULT_SENSITIVE} */ - public static Set DEFAULT_SENSITIVE = ProxyProperties.DEFAULT_SENSITIVE; + public static Set DEFAULT_SENSITIVE = ProxyExchangeWebfluxProperties.DEFAULT_SENSITIVE; private HttpMethod httpMethod; @@ -198,17 +198,6 @@ public class ProxyExchange { return this; } - /** - * Sets the names of sensitive headers that are not passed downstream to the backend - * service. - * @param names the names of sensitive headers - * @return this for convenience - * @deprecated {@link #excluded(String...)} - */ - public ProxyExchange sensitive(String... names) { - return excluded(names); - } - /** * Sets the names of excluded headers that are not passed downstream to the backend * service. diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java index 7a7ef29c..35a09127 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java @@ -58,11 +58,6 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol this.autoForwardedHeaders = autoForwardedHeaders; } - @Deprecated - public void setSensitive(Set excluded) { - setExcluded(excluded); - } - public void setExcluded(Set excluded) { this.excluded = excluded; } diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyProperties.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyProperties.java deleted file mode 100644 index 0c7184ca..00000000 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyProperties.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2016-2019 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.gateway.webflux.config; - -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; -import org.springframework.cloud.gateway.webflux.ProxyExchange; -import org.springframework.http.HttpHeaders; - -/** - * Configuration properties for the {@link ProxyExchange} argument handler in - * @RequestMapping methods. - * - * @author Dave Syer - * @author Tim Ysewyn - * @author Joris Kuipers - * @deprecated {@link ProxyExchangeWebfluxProperties} - * - */ -@Deprecated -@ConfigurationProperties("spring.cloud.gateway.proxy") -public class ProxyProperties { - - /** - * Contains headers that are considered case-sensitive by default. - */ - public static Set DEFAULT_SENSITIVE = Set.of("cookie", "authorization"); - - /** - * Contains headers that are skipped by default. - */ - public static Set DEFAULT_SKIPPED = Set.of("content-length", "host"); - - /** - * Fixed header values that will be added to all downstream requests. - */ - private Map headers = new LinkedHashMap<>(); - - /** - * A set of header names that should be sent downstream by default. - */ - private Set autoForward = new HashSet<>(); - - /** - * A set of sensitive header names that will not be sent downstream by default. - */ - private Set sensitive = DEFAULT_SENSITIVE; - - /** - * A set of header names that will not be sent downstream because they could be - * problematic. - */ - private Set skipped = DEFAULT_SKIPPED; - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebfluxProperties.PREFIX + ".headers", since = "4.3.0") - public Map getHeaders() { - return headers; - } - - public void setHeaders(Map headers) { - this.headers = headers; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebfluxProperties.PREFIX + ".auto-forward", - since = "4.3.0") - public Set getAutoForward() { - return autoForward; - } - - public void setAutoForward(Set autoForward) { - this.autoForward = autoForward; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebfluxProperties.PREFIX + ".sensitive", - since = "4.3.0") - public Set getSensitive() { - return sensitive; - } - - public void setSensitive(Set sensitive) { - this.sensitive = sensitive; - } - - @DeprecatedConfigurationProperty(replacement = ProxyExchangeWebfluxProperties.PREFIX + ".skipped", since = "4.3.0") - public Set getSkipped() { - return skipped; - } - - public void setSkipped(Set skipped) { - this.skipped = skipped; - } - - public HttpHeaders convertHeaders() { - HttpHeaders headers = new HttpHeaders(); - for (String key : this.headers.keySet()) { - headers.set(key, this.headers.get(key)); - } - return headers; - } - -} diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java index 116f0b10..465837c5 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java @@ -48,7 +48,7 @@ import org.springframework.web.reactive.result.method.annotation.ArgumentResolve @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication @ConditionalOnClass({ HandlerMethodReturnValueHandler.class, WebClient.class }) -@EnableConfigurationProperties({ ProxyExchangeWebfluxProperties.class, ProxyProperties.class }) +@EnableConfigurationProperties({ ProxyExchangeWebfluxProperties.class }) public class ProxyResponseAutoConfiguration implements WebFluxConfigurer { @Autowired diff --git a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeWebfluxPropertiesMigrationTests.java b/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeWebfluxPropertiesMigrationTests.java deleted file mode 100644 index 974294ba..00000000 --- a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeWebfluxPropertiesMigrationTests.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2013-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. - * 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.gateway.webflux.config; - -import org.junit.jupiter.api.Test; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.ActiveProfiles; - -import static org.assertj.core.api.Assertions.assertThat; - -@SuppressWarnings("unchecked") -@SpringBootTest(properties = {}, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("propertiesmigrationtests") -public class ProxyExchangeWebfluxPropertiesMigrationTests { - - @Autowired - ProxyExchangeWebfluxProperties properties; - - @Test - public void deprecatedRoutePropertiesWork() { - assertThat(properties.getHeaders()).hasSize(2); - assertThat(properties.getAutoForward()).hasSize(2); - assertThat(properties.getSensitive()).hasSize(2); - assertThat(properties.getSkipped()).hasSize(3); - } - - @SpringBootConfiguration - @EnableAutoConfiguration - protected static class TestConfiguration { - - } - -}