From afaec85653197db5516f8495eff71a46314e24cf Mon Sep 17 00:00:00 2001 From: Jens Kristian Villadsen Date: Fri, 9 Jun 2023 11:39:54 +0200 Subject: [PATCH] Addressing https://github.com/hapifhir/hapi-fhir-jpaserver-starter/issues/486 and https://github.com/hapifhir/hapi-fhir-jpaserver-starter/issues/485 --- .../uhn/fhir/jpa/starter/AppProperties.java | 13 +++++++- .../starter/ExtraStaticFilesConfigurer.java | 31 +++++++++++++------ src/main/resources/application.yaml | 3 +- 3 files changed, 35 insertions(+), 12 deletions(-) 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 b48d4e1550f..ecd880eb3f4 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java @@ -76,6 +76,8 @@ public class AppProperties { private String staticLocation = null; + private String staticLocationPrefix = "/static"; + private Boolean lastn_enabled = false; private boolean store_resource_in_lucene_index_enabled = false; private NormalizedQuantitySearchLevel normalized_quantity_search_level = NormalizedQuantitySearchLevel.NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED; @@ -89,7 +91,16 @@ public class AppProperties { private final List custom_interceptor_classes = new ArrayList<>(); - public List getCustomInterceptorClasses() { + public String getStaticLocationPrefix() { + return staticLocationPrefix; + } + + public void setStaticLocationPrefix(String staticLocationPrefix) { + this.staticLocationPrefix = staticLocationPrefix; + } + + + public List getCustomInterceptorClasses() { return custom_interceptor_classes; } diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java b/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java index d875ec6a5d6..a3b528c0bda 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java @@ -1,6 +1,5 @@ package ca.uhn.fhir.jpa.starter; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; @@ -14,25 +13,37 @@ @ConditionalOnProperty(prefix = "hapi.fhir", name = "staticLocation") public class ExtraStaticFilesConfigurer implements WebMvcConfigurer { - public static final String ROOT_CONTEXT_PATH = "/static"; - @Autowired - AppProperties appProperties; + private String staticLocation; + private String rootContextPath; - @Override + public ExtraStaticFilesConfigurer(AppProperties appProperties) { + + rootContextPath = appProperties.getStaticLocationPrefix(); + if(rootContextPath.endsWith("/")) + rootContextPath = rootContextPath.substring(0, rootContextPath.lastIndexOf('/')); + + staticLocation = appProperties.getStaticLocation(); + if(staticLocation.endsWith("/")) + staticLocation = staticLocation.substring(0, staticLocation.lastIndexOf('/')); + + } + + + @Override public void addResourceHandlers(ResourceHandlerRegistry theRegistry) { - theRegistry.addResourceHandler(ROOT_CONTEXT_PATH + "/**").addResourceLocations(appProperties.getStaticLocation()); + theRegistry.addResourceHandler(rootContextPath + "/**").addResourceLocations(staticLocation); } @Override public void addViewControllers(ViewControllerRegistry registry) { - String path = URI.create(appProperties.getStaticLocation()).getPath(); + String path = URI.create(staticLocation).getPath(); String lastSegment = path.substring(path.lastIndexOf('/') + 1); - registry.addViewController(ROOT_CONTEXT_PATH).setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + registry.addViewController(rootContextPath).setViewName("redirect:" + rootContextPath + "/" + lastSegment + "/index.html"); - registry.addViewController(ROOT_CONTEXT_PATH + "/*").setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + registry.addViewController(rootContextPath + "/*").setViewName("redirect:" + rootContextPath + "/" + lastSegment + "/index.html"); - registry.addViewController(ROOT_CONTEXT_PATH + "/" + lastSegment + "/").setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + registry.addViewController(rootContextPath + "/" + lastSegment + "/").setViewName("redirect:" + rootContextPath + "/" + lastSegment + "/index.html"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 13d85fd978a..c90f37ead04 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -64,7 +64,8 @@ hapi: ### 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 - ### enables the server to host content like HTML, css, etc. under the url pattern of /static/** + ### enables the server to host content like HTML, css, etc. under the url pattern of eg. /static/** + # staticLocationPrefix: /static ### the deepest folder level will be used. E.g. - if you put file:/foo/bar/bazz as value then the files are resolved under /static/bazz/** #staticLocation: file:/foo/bar/bazz ### enable to set the Server URL