Skip to content

Commit 9092eef

Browse files
authored
Merge branch 'spring-cloud:main' into fix-connection-leak
2 parents 6ce0e1d + 03dcf23 commit 9092eef

File tree

93 files changed

+1787
-523
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+1787
-523
lines changed

.github/workflows/maven.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ name: Build
55

66
on:
77
push:
8-
branches: [ main, 3.1.x ]
8+
branches: [ main, 4.2.x, 4.1.x, 3.1.x ]
99
pull_request:
10-
branches: [ main, 3.1.x ]
10+
branches: [ main, 4.2.x, 4.1.x, 3.1.x ]
1111

1212
jobs:
1313
build:

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ public GlobalFilter customGlobalFilter() {
134134
.defaultIfEmpty("Default User")
135135
.map(userName -> {
136136
//adds header to proxied request
137-
exchange.getRequest().mutate().header("CUSTOM-REQUEST-HEADER", userName).build();
138-
return exchange;
137+
ServerHttpRequest.Builder builder = exchange.getRequest().mutate().header("CUSTOM-REQUEST-HEADER", userName);
138+
//use builder to manipulate the request
139+
return exchange.mutate().request(builder.build()).build();
139140
})
140141
.flatMap(chain::filter);
141142
}

docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/gatewayfilter-factories/retry-factory.adoc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ The `Retry` `GatewayFilter` factory supports the following parameters:
1212
Retries are performed after a backoff interval of `firstBackoff * (factor ^ n)`, where `n` is the iteration.
1313
If `maxBackoff` is configured, the maximum backoff applied is limited to `maxBackoff`.
1414
If `basedOnPreviousValue` is true, the backoff is calculated by using `prevBackoff * factor`.
15+
* `jitter`: The configured random jitter for the retries.
16+
Generating a backoff between `[backoff - backoff*randomFactor, backoff + backoff*randomFactor]`
17+
* `timeout`: The configured timeout for the retries.
1518

1619
The following defaults are configured for `Retry` filter, if enabled:
1720

@@ -20,6 +23,8 @@ The following defaults are configured for `Retry` filter, if enabled:
2023
* `methods`: GET method
2124
* `exceptions`: `IOException` and `TimeoutException`
2225
* `backoff`: disabled
26+
* `jitter`: disabled
27+
* `timeout`: unlimited
2328

2429
The following listing configures a Retry `GatewayFilter`:
2530

@@ -45,6 +50,9 @@ spring:
4550
maxBackoff: 50ms
4651
factor: 2
4752
basedOnPreviousValue: false
53+
jitter:
54+
randomFactor: 0.5
55+
timeout: 100ms
4856
----
4957

5058
NOTE: When using the retry filter with a `forward:` prefixed URL, the target endpoint should be written carefully so that, in case of an error, it does not do anything that could result in a response being sent to the client and committed.
@@ -79,10 +87,13 @@ spring:
7987
maxBackoff: 50ms
8088
factor: 2
8189
basedOnPreviousValue: false
90+
jitter:
91+
randomFactor: 0.5
92+
timeout: 100ms
8293
8394
- id: retryshortcut_route
8495
uri: https://example.org
8596
filters:
86-
- Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false
97+
- Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false,0.5,100ms
8798
----
8899

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
== Forwarded Headers Filter
88
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.
99

10+
The `Forwarded by` header part can be enabled by setting the following property to true (defaults to false):
11+
12+
- `spring.cloud.gateway.forwarded.by.enabled=true`
13+
1014
[[removehopbyhop-headers-filter]]
1115
== RemoveHopByHop Headers Filter
1216
The `RemoveHopByHop` Headers Filter removes headers from forwarded requests. The default list of headers that is removed comes from the https://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-14#section-7.1.3[IETF].

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ spring:
1414
routes:
1515
- id: add_request_header_route
1616
uri: https://example.org
17+
predicates:
18+
- Path=/red
1719
filters:
1820
- AddRequestHeader=X-Request-red, blue
1921
----
2022

2123
.GatewaySampleApplication.java
2224
[source,java]
2325
----
26+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
2427
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestHeader;
2528
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
2629
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -30,10 +33,10 @@ class RouteConfiguration {
3033
3134
@Bean
3235
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
33-
return route("addRequestHeader")
34-
.route(GET("/red"), http("https://example.org"))
35-
.before(addRequestHeader("X-Request-red", "blue"))
36-
.build();
36+
return route("add_request_header_route")
37+
.GET("/red", http())
38+
.before(uri("https://example.org"))
39+
.before(addRequestHeader("X-Request-red", "blue"));
3740
}
3841
}
3942
----
@@ -47,15 +50,20 @@ The following example configures an `AddRequestHeader` filter that uses a variab
4750
.GatewaySampleApplication.java
4851
[source,java]
4952
----
53+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
54+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestHeader;
55+
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
56+
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
57+
5058
@Configuration
5159
class RouteConfiguration {
5260
5361
@Bean
5462
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
55-
return route("addRequestHeader")
56-
.route(GET("/red/{segment}"), http("https://example.org"))
57-
.before(addRequestHeader("X-Request-red", "blue-{segment}"))
58-
.build();
63+
return route("add_request_header_route")
64+
.GET("/red/{segment}", http())
65+
.before(uri("https://example.org"))
66+
.before(addRequestHeader("X-Request-red", "blue-{segment}"));
5967
}
6068
}
6169
----

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ spring:
1212
gateway:
1313
mvc:
1414
routes:
15-
- id: add_request_headers_route
15+
- id: add_request_headers_route_inp
1616
uri: https://example.org
17+
predicates:
18+
- Path=/red
1719
filters:
1820
- AddRequestHeadersIfNotPresent=X-Request-Color-1:blue,X-Request-Color-2:green
1921
----
2022

2123
.GatewaySampleApplication.java
2224
[source,java]
2325
----
26+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
2427
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestHeadersIfNotPresent;
2528
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
2629
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -29,9 +32,11 @@ import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFuncti
2932
class RouteConfiguration {
3033
3134
@Bean
32-
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
33-
return route(GET("/red"), http("https://example.org"))
34-
.before(addRequestHeadersIfNotPresent("X-Request-Color-1:blue","X-Request-Color-2:green"));
35+
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeaderInp() {
36+
return route("add_request_headers_route_inp")
37+
.GET("/red", http())
38+
.before(uri("https://example.org"))
39+
.before(addRequestHeadersIfNotPresent("X-Request-Color-1:blue","X-Request-Color-2:green"));
3540
}
3641
}
3742
----
@@ -49,13 +54,20 @@ The following example configures an `AddRequestHeadersIfNotPresent` filter that
4954
.GatewaySampleApplication.java
5055
[source,java]
5156
----
57+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestHeadersIfNotPresent;
58+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
59+
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
60+
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
61+
5262
@Configuration
5363
class RouteConfiguration {
5464
5565
@Bean
56-
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
57-
return route(GET("/red/{segment}"), http("https://example.org"))
58-
.before(addRequestHeadersIfNotPresent("X-Request-red", "blue-{segment}"));
66+
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeaderInp() {
67+
return route("add_request_header_route_inp")
68+
.GET("/red/{segment}", http())
69+
.before(uri("https://example.org"))
70+
.before(addRequestHeadersIfNotPresent("X-Request-red", "blue-{segment}"));
5971
}
6072
}
6173
----
@@ -66,7 +78,7 @@ spring:
6678
cloud:
6779
gateway:
6880
routes:
69-
- id: add_request_header_route
81+
- id: add_request_header_route_inp
7082
uri: https://example.org
7183
predicates:
7284
- Path=/red/{segment}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ spring:
1414
routes:
1515
- id: add_request_parameter_route
1616
uri: https://example.org
17+
predicates:
18+
- Path=/anything/addrequestparam
1719
filters:
1820
- AddRequestParameter=red, blue
1921
----
2022

2123
.GatewaySampleApplication.java
2224
[source,java]
2325
----
26+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
2427
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestParameter;
2528
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
2629
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -29,11 +32,12 @@ import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFuncti
2932
class RouteConfiguration {
3033
3134
@Bean
32-
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
33-
return route("add_request_parameter_route")
34-
.GET("/anything/addrequestparam", http("https://example.org"))
35-
.before(addRequestParameter("red", "blue"))
36-
.build();
35+
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqParameter() {
36+
return route("add_request_parameter_route")
37+
.GET("/anything/addrequestparam", http())
38+
.before(uri("https://example.org"))
39+
.before(addRequestParameter("red", "blue"))
40+
.build();
3741
}
3842
}
3943
----
@@ -47,6 +51,7 @@ The following example configures an `AddRequestParameter` filter that uses a var
4751
.GatewaySampleApplication.java
4852
[source,java]
4953
----
54+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
5055
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestParameter;
5156
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
5257
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -56,11 +61,12 @@ import static org.springframework.cloud.gateway.server.mvc.predicate.GatewayRequ
5661
class RouteConfiguration {
5762
5863
@Bean
59-
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
60-
return route("add_request_parameter_route")
61-
.route(host("{segment}.myhost.org"), http("https://example.org"))
62-
.before(addRequestParameter("foo", "bar-{segment}"))
63-
.build();
64+
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqParameter() {
65+
return route("add_request_parameter_route")
66+
.route(host("{segment}.myhost.org"), http())
67+
.before(uri("https://example.org"))
68+
.before(addRequestParameter("foo", "bar-{segment}"))
69+
.build();
6470
}
6571
}
6672
----

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ spring:
1414
routes:
1515
- id: add_response_header_route
1616
uri: https://example.org
17+
predicates:
18+
- Path=/anything/addresheader
1719
filters:
1820
- AddResponseHeader=X-Response-Red, Blue
1921
----
2022

2123
.GatewaySampleApplication.java
2224
[source,java]
2325
----
26+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
2427
import static org.springframework.cloud.gateway.server.mvc.filter.AfterFilterFunctions.addResponseHeader;
2528
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
2629
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -30,9 +33,10 @@ class RouteConfiguration {
3033
3134
@Bean
3235
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddRespHeader() {
33-
return route("addresponseheader")
34-
.GET("/anything/addresheader", http("https://example.org"))
35-
.after(addResponseHeader("X-Response-Red", "Blue"))
36+
return route("add_response_header_route")
37+
.GET("/anything/addresheader", http())
38+
.before(uri("https://example.org"))
39+
.after(addResponseHeader("X-Response-Red", "Blue"))
3640
.build();
3741
}
3842
}
@@ -47,6 +51,7 @@ The following example configures an `AddResponseHeader` filter that uses a varia
4751
.GatewaySampleApplication.java
4852
[source,java]
4953
----
54+
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
5055
import static org.springframework.cloud.gateway.server.mvc.filter.AfterFilterFunctions.addResponseHeader;
5156
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
5257
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@@ -57,10 +62,11 @@ class RouteConfiguration {
5762
5863
@Bean
5964
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddRespHeader() {
60-
return route("add_response_header_route")
61-
.route(host("{segment}.myhost.org"), http("https://example.org"))
62-
.after(addResponseHeader("foo", "bar-{segment}"))
63-
.build();
65+
return route("add_response_header_route")
66+
.route(host("{segment}.myhost.org"), http())
67+
.before(uri("https://example.org"))
68+
.after(addResponseHeader("foo", "bar-{segment}"))
69+
.build();
6470
}
6571
}
6672
----

0 commit comments

Comments
 (0)