diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 8f46de2e56f..421e24488c3 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -209,6 +209,8 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer { private String protocolHeader; + private String portHeader; + private String remoteIpHeader; private File basedir; @@ -285,6 +287,14 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer { this.protocolHeader = protocolHeader; } + public String getPortHeader() { + return this.portHeader; + } + + public void setPortHeader(String portHeader) { + this.portHeader = portHeader; + } + public String getRemoteIpHeader() { return this.remoteIpHeader; } @@ -321,6 +331,7 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer { valve.setRemoteIpHeader(remoteIpHeader); valve.setProtocolHeader(protocolHeader); valve.setInternalProxies(getInternalProxies()); + valve.setPortHeader(getPortHeader()); factory.addContextValves(valve); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index 7c26398bb9a..66f75e86049 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -177,6 +177,7 @@ public class ServerPropertiesTests { map.put("server.tomcat.remote_ip_header", "x-my-remote-ip-header"); map.put("server.tomcat.protocol_header", "x-my-protocol-header"); map.put("server.tomcat.internal_proxies", "192.168.0.1"); + map.put("server.tomcat.port-header", "x-my-forward-port"); bindProperties(map); TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory(); @@ -188,6 +189,7 @@ public class ServerPropertiesTests { RemoteIpValve remoteIpValve = (RemoteIpValve) valve; assertEquals("x-my-protocol-header", remoteIpValve.getProtocolHeader()); assertEquals("x-my-remote-ip-header", remoteIpValve.getRemoteIpHeader()); + assertEquals("x-my-forward-port", remoteIpValve.getPortHeader()); assertEquals("192.168.0.1", remoteIpValve.getInternalProxies()); } diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index a14029430b3..9acdee71ee7 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -74,7 +74,8 @@ content into your application; rather pick only the properties that you need. 192\.168\.\d{1,3}\.\d{1,3}|\ 169\.254\.\d{1,3}\.\d{1,3}|\ 127\.\d{1,3}\.\d{1,3}\.\d{1,3} # regular expression matching trusted IP addresses - server.tomcat.protocol-header=x-forwarded-proto # ssl forward headers + server.tomcat.protocol-header=x-forwarded-proto # front end proxy forward header + server.tomcat.port-header= # front end proxy port header server.tomcat.remote-ip-header=x-forwarded-for server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp) server.tomcat.background-processor-delay=30; # in seconds