Skip to content

Commit c4670ab

Browse files
committed
Updates for new properties namespaces and polish.
Fixes some merge errors. Formatting
1 parent adede1e commit c4670ab

File tree

12 files changed

+104
-37
lines changed

12 files changed

+104
-37
lines changed

docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/httpheadersfilters.adoc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
[[forwarded-headers-filter]]
77
== Forwarded Headers Filter
8-
The `Forwarded` Headers Filter creates a `Forwarded` header to send to the downstream service. It adds the `Host` header, scheme and port of the current request to any existing `Forwarded` header. To activate this filter set the `spring.cloud.gateway.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
8+
The `Forwarded` Headers Filter creates a `Forwarded` header to send to the downstream service. It adds the `Host` header, scheme and port of the current request to any existing `Forwarded` header. To activate this filter set the `spring.cloud.gateway.server.webflux.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
99

1010
The `Forwarded by` header part can be enabled by setting the following property to true (defaults to false):
1111

12-
- `spring.cloud.gateway.forwarded.by.enabled=true`
12+
- `spring.cloud.gateway.server.webflux.forwarded.by.enabled=true`
1313

1414
[[removehopbyhop-headers-filter]]
1515
== RemoveHopByHop Headers Filter
@@ -25,25 +25,25 @@ The `RemoveHopByHop` Headers Filter removes headers from forwarded requests. The
2525
* Transfer-Encoding
2626
* Upgrade
2727

28-
To change this, set the `spring.cloud.gateway.filter.remove-hop-by-hop.headers` property to the list of header names to remove.
28+
To change this, set the `spring.cloud.gateway.server.webflux.filter.remove-hop-by-hop.headers` property to the list of header names to remove.
2929

3030
[[xforwarded-headers-filter]]
3131
== XForwarded Headers Filter
32-
The `XForwarded` Headers Filter creates various `X-Forwarded-*` headers to send to the downstream service. It uses the `Host` header, scheme, port and path of the current request to create the various headers. To activate this filter set the `spring.cloud.gateway.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
32+
The `XForwarded` Headers Filter creates various `X-Forwarded-*` headers to send to the downstream service. It uses the `Host` header, scheme, port and path of the current request to create the various headers. To activate this filter set the `spring.cloud.gateway.server.webflux.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
3333

3434
Creating of individual headers can be controlled by the following boolean properties (defaults to true):
3535

36-
- `spring.cloud.gateway.x-forwarded.for-enabled`
37-
- `spring.cloud.gateway.x-forwarded.host-enabled`
38-
- `spring.cloud.gateway.x-forwarded.port-enabled`
39-
- `spring.cloud.gateway.x-forwarded.proto-enabled`
40-
- `spring.cloud.gateway.x-forwarded.prefix-enabled`
36+
- `spring.cloud.gateway.server.webflux.x-forwarded.for-enabled`
37+
- `spring.cloud.gateway.server.webflux.x-forwarded.host-enabled`
38+
- `spring.cloud.gateway.server.webflux.x-forwarded.port-enabled`
39+
- `spring.cloud.gateway.server.webflux.x-forwarded.proto-enabled`
40+
- `spring.cloud.gateway.server.webflux.x-forwarded.prefix-enabled`
4141

4242
Appending multiple headers can be controlled by the following boolean properties (defaults to true):
4343

44-
- `spring.cloud.gateway.x-forwarded.for-append`
45-
- `spring.cloud.gateway.x-forwarded.host-append`
46-
- `spring.cloud.gateway.x-forwarded.port-append`
47-
- `spring.cloud.gateway.x-forwarded.proto-append`
48-
- `spring.cloud.gateway.x-forwarded.prefix-append`
44+
- `spring.cloud.gateway.server.webflux.x-forwarded.for-append`
45+
- `spring.cloud.gateway.server.webflux.x-forwarded.host-append`
46+
- `spring.cloud.gateway.server.webflux.x-forwarded.port-append`
47+
- `spring.cloud.gateway.server.webflux.x-forwarded.proto-append`
48+
- `spring.cloud.gateway.server.webflux.x-forwarded.prefix-append`
4949

docs/modules/ROOT/pages/spring-cloud-gateway-server-webmvc/httpheadersfilters.adoc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ HttpHeadersFilters are applied to the requests before sending them downstream, s
55

66
[[forwarded-headers-filter]]
77
== Forwarded Headers Filter
8-
The `Forwarded` Headers Filter creates a `Forwarded` header to send to the downstream service. It adds the `Host` header, scheme and port of the current request to any existing `Forwarded` header. To activate this filter set the `spring.cloud.gateway.mvc.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
8+
The `Forwarded` Headers Filter creates a `Forwarded` header to send to the downstream service. It adds the `Host` header, scheme and port of the current request to any existing `Forwarded` header. To activate this filter set the `spring.cloud.gateway.server.webmvc.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
99

1010
[[removehopbyhop-headers-filter]]
1111
== RemoveHopByHop Headers Filter
@@ -25,21 +25,21 @@ The `RemoveHopByHop` Headers Filter removes headers from forwarded requests. The
2525

2626
[[xforwarded-headers-filter]]
2727
== XForwarded Headers Filter
28-
The `XForwarded` Headers Filter creates various `X-Forwarded-*` headers to send to the downstream service. It uses the `Host` header, scheme, port and path of the current request to create the various headers. To activate this filter set the `spring.cloud.gateway.mvc.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
28+
The `XForwarded` Headers Filter creates various `X-Forwarded-*` headers to send to the downstream service. It uses the `Host` header, scheme, port and path of the current request to create the various headers. To activate this filter set the `spring.cloud.gateway.server.webmvc.trusted-proxies` property to a Java Regular Expression. This regular expression defines the proxies that are trusted when they appear in the `Forwarded` header.
2929

3030
Creating of individual headers can be controlled by the following boolean properties (defaults to true):
3131

32-
- `spring.cloud.gateway.x-forwarded.for-enabled`
33-
- `spring.cloud.gateway.x-forwarded.host-enabled`
34-
- `spring.cloud.gateway.x-forwarded.port-enabled`
35-
- `spring.cloud.gateway.x-forwarded.proto-enabled`
36-
- `spring.cloud.gateway.x-forwarded.prefix-enabled`
32+
- `spring.cloud.gateway.server.webmvc.x-forwarded.for-enabled`
33+
- `spring.cloud.gateway.server.webmvc.x-forwarded.host-enabled`
34+
- `spring.cloud.gateway.server.webmvc.x-forwarded.port-enabled`
35+
- `spring.cloud.gateway.server.webmvc.x-forwarded.proto-enabled`
36+
- `spring.cloud.gateway.server.webmvc.x-forwarded.prefix-enabled`
3737

3838
Appending multiple headers can be controlled by the following boolean properties (defaults to true):
3939

40-
- `spring.cloud.gateway.x-forwarded.for-append`
41-
- `spring.cloud.gateway.x-forwarded.host-append`
42-
- `spring.cloud.gateway.x-forwarded.port-append`
43-
- `spring.cloud.gateway.x-forwarded.proto-append`
44-
- `spring.cloud.gateway.x-forwarded.prefix-append`
40+
- `spring.cloud.gateway.server.webmvc.x-forwarded.for-append`
41+
- `spring.cloud.gateway.server.webmvc.x-forwarded.host-append`
42+
- `spring.cloud.gateway.server.webmvc.x-forwarded.port-append`
43+
- `spring.cloud.gateway.server.webmvc.x-forwarded.proto-append`
44+
- `spring.cloud.gateway.server.webmvc.x-forwarded.prefix-append`
4545

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/XForwardedRequestHeadersFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,10 @@ public XForwardedRequestHeadersFilter(XForwardedRequestHeadersFilterProperties p
8282
}
8383

8484
private XForwardedRequestHeadersFilter(XForwardedRequestHeadersFilterProperties props,
85-
TrustedProxies trustedProxies) {
85+
TrustedProxies trustedProxies) {
86+
Assert.notNull(props, "XForwardedRequestHeadersFilterProperties must not be null");
8687
Assert.notNull(trustedProxies, "trustedProxies must not be null");
87-
88+
this.properties = props;
8889
this.trustedProxies = trustedProxies;
8990
}
9091

spring-cloud-gateway-server-mvc/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,18 @@
365365
"defaultValue": "jdk",
366366
"deprecated": true,
367367
"deprecation": {}
368+
},
369+
{
370+
"name": "spring.cloud.gateway.mvc.trusted-proxies",
371+
"type": "java.lang.String",
372+
"description": "Regular expression defining proxies that are trusted when they appear in a Forwarded or X-Forwarded header.",
373+
"sourceType": "org.springframework.cloud.gateway.server.mvc.config.GatewayMvcProperties",
374+
"defaultValue": true,
375+
"deprecated": true,
376+
"deprecation": {
377+
"replacement": "spring.cloud.gateway.server.webmvc.trusted-proxies",
378+
"since": "4.3.0"
379+
}
368380
}
369381
]
370382
}

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/ForwardedRequestHeadersFilterTests.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,16 @@
2727

2828
import org.junit.jupiter.api.Test;
2929

30+
import org.springframework.boot.autoconfigure.AutoConfigurations;
31+
import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration;
32+
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
33+
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
34+
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
35+
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
36+
import org.springframework.cloud.gateway.server.mvc.GatewayServerMvcAutoConfiguration;
37+
import org.springframework.cloud.gateway.server.mvc.config.GatewayMvcProperties;
3038
import org.springframework.cloud.gateway.server.mvc.filter.ForwardedRequestHeadersFilter.Forwarded;
39+
import org.springframework.cloud.gateway.server.mvc.predicate.PredicateAutoConfiguration;
3140
import org.springframework.http.HttpHeaders;
3241
import org.springframework.mock.web.MockHttpServletRequest;
3342
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@@ -53,6 +62,31 @@ static Map<String, String> map(String... values) {
5362
return map;
5463
}
5564

65+
@Test
66+
public void trustedProxiesConditionMatches() {
67+
new WebApplicationContextRunner()
68+
.withConfiguration(AutoConfigurations.of(WebMvcAutoConfiguration.class, RestClientAutoConfiguration.class,
69+
SslAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class,
70+
GatewayServerMvcAutoConfiguration.class, FilterAutoConfiguration.class,
71+
PredicateAutoConfiguration.class))
72+
.withPropertyValues(GatewayMvcProperties.PREFIX + ".trusted-proxies=11\\.0\\.0\\..*")
73+
.run(context -> {
74+
assertThat(context).hasSingleBean(ForwardedRequestHeadersFilter.class);
75+
});
76+
}
77+
78+
@Test
79+
public void trustedProxiesConditionDoesNotMatch() {
80+
new WebApplicationContextRunner()
81+
.withConfiguration(AutoConfigurations.of(WebMvcAutoConfiguration.class, RestClientAutoConfiguration.class,
82+
SslAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class,
83+
GatewayServerMvcAutoConfiguration.class, FilterAutoConfiguration.class,
84+
PredicateAutoConfiguration.class))
85+
.run(context -> {
86+
assertThat(context).doesNotHaveBean(ForwardedRequestHeadersFilter.class);
87+
});
88+
}
89+
5690
@Test
5791
public void forwardedHeaderDoesNotExist() {
5892
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get")

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/XForwardedRequestHeadersFilterTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
3030
import org.springframework.cloud.gateway.server.mvc.GatewayServerMvcAutoConfiguration;
3131
import org.springframework.cloud.gateway.server.mvc.config.GatewayMvcProperties;
32+
import org.springframework.cloud.gateway.server.mvc.predicate.PredicateAutoConfiguration;
3233
import org.springframework.http.HttpHeaders;
3334
import org.springframework.mock.web.MockHttpServletRequest;
3435
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@@ -71,7 +72,8 @@ public void trustedProxiesConditionMatches() {
7172
new WebApplicationContextRunner()
7273
.withConfiguration(AutoConfigurations.of(WebMvcAutoConfiguration.class, RestClientAutoConfiguration.class,
7374
SslAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class,
74-
GatewayServerMvcAutoConfiguration.class))
75+
GatewayServerMvcAutoConfiguration.class, FilterAutoConfiguration.class,
76+
PredicateAutoConfiguration.class))
7577
.withPropertyValues(GatewayMvcProperties.PREFIX + ".trusted-proxies=11\\.0\\.0\\..*")
7678
.run(context -> {
7779
assertThat(context).hasSingleBean(XForwardedRequestHeadersFilter.class);
@@ -83,7 +85,8 @@ public void trustedProxiesConditionDoesNotMatch() {
8385
new WebApplicationContextRunner()
8486
.withConfiguration(AutoConfigurations.of(WebMvcAutoConfiguration.class, RestClientAutoConfiguration.class,
8587
SslAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class,
86-
GatewayServerMvcAutoConfiguration.class))
88+
GatewayServerMvcAutoConfiguration.class, FilterAutoConfiguration.class,
89+
PredicateAutoConfiguration.class))
8790
.run(context -> {
8891
assertThat(context).doesNotHaveBean(XForwardedRequestHeadersFilter.class);
8992
});

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@ public SecureHeadersProperties secureHeadersProperties() {
323323

324324
@Bean
325325
@Conditional(TrustedProxies.ForwardedTrustedProxiesCondition.class)
326-
public ForwardedHeadersFilter forwardedHeadersFilter(Environment env, ServerProperties serverProperties, GatewayProperties properties) {
326+
public ForwardedHeadersFilter forwardedHeadersFilter(Environment env, ServerProperties serverProperties,
327+
GatewayProperties properties) {
327328
boolean forwardedByEnabled = env.getProperty("spring.cloud.gateway.server.webflux.forwarded.by.enabled",
328329
Boolean.class, false);
329330
ForwardedHeadersFilter forwardedHeadersFilter = new ForwardedHeadersFilter(properties.getTrustedProxies());

spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2432,6 +2432,18 @@
24322432
"replacement": "spring.cloud.gateway.server.webflux.x-forwarded.proto-enabled",
24332433
"since": "4.3.0"
24342434
}
2435+
},
2436+
{
2437+
"name": "spring.cloud.gateway.trusted-proxies",
2438+
"type": "java.lang.String",
2439+
"description": "Regular expression defining proxies that are trusted when they appear in a Forwarded or X-Forwarded header.",
2440+
"sourceType": "org.springframework.cloud.gateway.config.GatewayProperties",
2441+
"defaultValue": true,
2442+
"deprecated": true,
2443+
"deprecation": {
2444+
"replacement": "spring.cloud.gateway.server.webflux.trusted-proxies",
2445+
"since": "4.3.0"
2446+
}
24352447
}
24362448
]
24372449
}

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,9 @@ public void forwardedHeaderFiltersEnabledWithProperties() {
357357
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, MetricsAutoConfiguration.class,
358358
SimpleMetricsExportAutoConfiguration.class, GatewayAutoConfiguration.class,
359359
ServerPropertiesConfig.class))
360-
.withPropertyValues("spring.cloud.gateway.forwarded.enabled=true",
361-
"spring.cloud.gateway.x-forwarded.enabled=true", "spring.cloud.gateway.trusted-proxies=.*")
360+
.withPropertyValues("spring.cloud.gateway.server.webflux.forwarded.enabled=true",
361+
"spring.cloud.gateway.server.webflux.x-forwarded.enabled=true",
362+
"spring.cloud.gateway.server.webflux.trusted-proxies=.*")
362363
.run(context -> {
363364
assertThat(context).hasSingleBean(XForwardedHeadersFilter.class)
364365
.hasSingleBean(ForwardedHeadersFilter.class);

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactoryIntegrationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@
6666
@SpringBootTest(webEnvironment = RANDOM_PORT,
6767
properties = { "spring.cloud.gateway.server.webflux.httpclient.connect-timeout=500",
6868
"spring.cloud.gateway.server.webflux.httpclient.response-timeout=2s",
69-
"logging.level.org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory=TRACE"
70-
"spring.cloud.gateway.server.webflux.trusted-proxies=.*", "spring.cloud.gateway.server.webflux.x-forwarded.enabled=true" })
69+
"logging.level.org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory=TRACE",
70+
"spring.cloud.gateway.server.webflux.trusted-proxies=.*",
71+
"spring.cloud.gateway.server.webflux.x-forwarded.enabled=true" })
7172
@DirtiesContext
7273
// default filter AddResponseHeader suppresses bug
7374
// https://github.com/spring-cloud/spring-cloud-gateway/issues/1315,

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public void trustedProxiesConditionMatches() {
264264
new ReactiveWebApplicationContextRunner()
265265
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, SslAutoConfiguration.class,
266266
ReactiveWebServerFactoryAutoConfiguration.class, GatewayAutoConfiguration.class))
267-
.withPropertyValues("spring.cloud.gateway.trusted-proxies=11\\.0\\.0\\..*")
267+
.withPropertyValues("spring.cloud.gateway.server.webflux.trusted-proxies=11\\.0\\.0\\..*")
268268
.run(context -> {
269269
assertThat(context).hasSingleBean(ForwardedHeadersFilter.class);
270270
});

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@
6363
import static org.springframework.cloud.gateway.test.TestUtils.getMap;
6464

6565
@SpringBootTest(webEnvironment = RANDOM_PORT,
66-
properties = { "spring.cloud.gateway.server.webflux.forwarded.by.enabled=true", "spring.cloud.gateway.server.webflux.forwarded.enabled=true", "spring.cloud.gateway.server.webflux.x-forwarded.enabled=true",
66+
properties = { "spring.cloud.gateway.server.webflux.forwarded.by.enabled=true",
67+
"spring.cloud.gateway.server.webflux.forwarded.enabled=true",
68+
"spring.cloud.gateway.server.webflux.x-forwarded.enabled=true",
6769
"spring.cloud.gateway.server.webflux.trusted-proxies=.*",
6870
"logging.level.org.springframework.cloud.gateway.filter.headers=TRACE" })
6971
@DirtiesContext

0 commit comments

Comments
 (0)