diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java index 729b873..3955156 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java @@ -67,6 +67,25 @@ public class AppProperties { private Boolean lastn_enabled = false; private NormalizedQuantitySearchLevel normalized_quantity_search_level = NormalizedQuantitySearchLevel.NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED; + private Boolean use_apache_address_strategy = false; + private Boolean use_apache_address_strategy_https = false; + + public Boolean getUse_apache_address_strategy() { + return use_apache_address_strategy; + } + + public void setUse_apache_address_strategy(Boolean use_apache_address_strategy) { + this.use_apache_address_strategy = use_apache_address_strategy; + } + + public Boolean getUse_apache_address_strategy_https() { + return use_apache_address_strategy_https; + } + + public void setUse_apache_address_strategy_https(Boolean use_apache_address_strategy_https) { + this.use_apache_address_strategy_https = use_apache_address_strategy_https; + } + public Integer getDefer_indexing_for_codesystems_of_size() { return defer_indexing_for_codesystems_of_size; } diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java index c2c7841..8154714 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java @@ -27,6 +27,8 @@ import ca.uhn.fhir.narrative.INarrativeGenerator; import ca.uhn.fhir.narrative2.NullNarrativeGenerator; import ca.uhn.fhir.rest.server.ETagSupportEnum; import ca.uhn.fhir.rest.server.HardcodedServerAddressStrategy; +import ca.uhn.fhir.rest.server.ApacheProxyAddressStrategy; +import ca.uhn.fhir.rest.server.IncomingRequestAddressStrategy; import ca.uhn.fhir.rest.server.RestfulServer; import ca.uhn.fhir.rest.server.interceptor.*; import ca.uhn.fhir.rest.server.interceptor.partition.RequestTenantPartitionInterceptor; @@ -239,6 +241,12 @@ public class BaseJpaRestfulServer extends RestfulServer { String serverAddress = appProperties.getServer_address(); if (!Strings.isNullOrEmpty(serverAddress)) { setServerAddressStrategy(new HardcodedServerAddressStrategy(serverAddress)); + } else if (appProperties.getUse_apache_address_strategy()) { + boolean useHttps = appProperties.getUse_apache_address_strategy_https(); + setServerAddressStrategy(useHttps ? ApacheProxyAddressStrategy.forHttps() : + ApacheProxyAddressStrategy.forHttp()); + } else { + setServerAddressStrategy(new IncomingRequestAddressStrategy()); } /* diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index a4d8734..6d685bd 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -32,6 +32,12 @@ spring: hapi: fhir: + ### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers + ### to determine the FHIR server address +# use_apache_address_strategy: false + ### forces the use of the https:// protocol for the returned server address. + ### alternatively, it may be set using the X-Forwarded-Proto header. +# use_apache_address_strategy_https: false ### enable to set the Server URL # server_address: http://hapi.fhir.org/baseR4 ### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5