diff --git a/docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/httpheadersfilters.adoc b/docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/httpheadersfilters.adoc index e2a6ac82..49a227e1 100644 --- a/docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/httpheadersfilters.adoc +++ b/docs/modules/ROOT/pages/spring-cloud-gateway-server-webflux/httpheadersfilters.adoc @@ -7,6 +7,10 @@ == Forwarded Headers Filter 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. +The `Forwarded by` header part can be enabled by setting the following property to true (defaults to false): + +- `spring.cloud.gateway.forwarded.by.enabled=true` + [[removehopbyhop-headers-filter]] == RemoveHopByHop Headers Filter 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]. 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 f95112cf..622af6c7 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 @@ -317,8 +317,11 @@ public class GatewayAutoConfiguration { @Bean @ConditionalOnProperty(name = "spring.cloud.gateway.forwarded.enabled", matchIfMissing = true) - public ForwardedHeadersFilter forwardedHeadersFilter() { - return new ForwardedHeadersFilter(); + public ForwardedHeadersFilter forwardedHeadersFilter(Environment env) { + boolean forwardedByEnabled = env.getProperty("spring.cloud.gateway.forwarded.by.enabled", Boolean.class, false); + ForwardedHeadersFilter forwardedHeadersFilter = new ForwardedHeadersFilter(); + forwardedHeadersFilter.setForwardedByEnabled(forwardedByEnabled); + return forwardedHeadersFilter; } // HttpHeaderFilter beans diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java index 7add0e43..39336326 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java @@ -30,7 +30,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; @@ -44,7 +43,6 @@ import org.springframework.web.server.ServerWebExchange; * @author Olga Maciaszek-Sharma * @author Tillmann Heigel */ -@ConfigurationProperties("spring.cloud.gateway.forwarded") public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { @Value("${server.port}") @@ -52,8 +50,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { private final Log logger = LogFactory.getLog(getClass()); - /** If Forwarded: by header is enabled. */ - private boolean byEnabled = true; + private boolean forwardedByEnabled = false; /** * Forwarded header. @@ -103,12 +100,8 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { return result; } - public boolean isByEnabled() { - return byEnabled; - } - - public void setByEnabled(boolean byEnabled) { - this.byEnabled = byEnabled; + public void setForwardedByEnabled(boolean forwardedByEnabled) { + this.forwardedByEnabled = forwardedByEnabled; } @Override @@ -162,7 +155,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { forwarded.put("for", forValue); } - if (byEnabled) { + if (forwardedByEnabled) { addForwardedByHeader(forwarded); } 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 4fb4e6b8..1aea9f85 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 @@ -389,6 +389,12 @@ "description": "Enables the ForwardedHeadersFilter.", "defaultValue": "true" }, + { + "name": "spring.cloud.gateway.forwarded.by.enabled", + "type": "java.lang.Boolean", + "description": "Enables the Forwarded: by header part.", + "defaultValue": "false" + }, { "name": "spring.cloud.gateway.httpserver.wiretap", "type": "java.lang.Boolean", diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java index b9069bf5..0bc91049 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java @@ -207,7 +207,7 @@ public class ForwardedHeadersFilterTests { Forwarded forwarded = new Forwarded(); InetAddress ipv4Address = InetAddress.getByName("216.103.69.111"); ForwardedHeadersFilter forwardedHeadersFilter = new ForwardedHeadersFilter(); - forwardedHeadersFilter.setByEnabled(true); + forwardedHeadersFilter.setForwardedByEnabled(true); forwardedHeadersFilter.addForwardedBy(forwarded, ipv4Address); @@ -220,7 +220,7 @@ public class ForwardedHeadersFilterTests { Forwarded forwarded = new Forwarded(); InetAddress ipv6Address = InetAddress.getByName("abc4:babf:955f:1724:11bc:0153:275c:d36e"); ForwardedHeadersFilter forwardedHeadersFilter = new ForwardedHeadersFilter(); - forwardedHeadersFilter.setByEnabled(true); + forwardedHeadersFilter.setForwardedByEnabled(true); forwardedHeadersFilter.addForwardedBy(forwarded, ipv6Address); @@ -234,7 +234,7 @@ public class ForwardedHeadersFilterTests { Forwarded forwarded = new Forwarded(); InetAddress ipv4Address = InetAddress.getByName("216.103.69.111"); ForwardedHeadersFilter forwardedHeadersFilter = new ForwardedHeadersFilter(); - forwardedHeadersFilter.setByEnabled(false); + forwardedHeadersFilter.setForwardedByEnabled(false); forwardedHeadersFilter.addForwardedBy(forwarded, ipv4Address);