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 fce7291..d875ec6 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/ExtraStaticFilesConfigurer.java @@ -3,20 +3,38 @@ 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; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import java.net.URI; + @Configuration @ConditionalOnProperty(prefix = "hapi.fhir", name = "staticLocation") public class ExtraStaticFilesConfigurer implements WebMvcConfigurer { - @Autowired - AppProperties appProperties; + public static final String ROOT_CONTEXT_PATH = "/static"; + @Autowired + AppProperties appProperties; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry theRegistry) { + theRegistry.addResourceHandler(ROOT_CONTEXT_PATH + "/**").addResourceLocations(appProperties.getStaticLocation()); + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + String path = URI.create(appProperties.getStaticLocation()).getPath(); + String lastSegment = path.substring(path.lastIndexOf('/') + 1); + + registry.addViewController(ROOT_CONTEXT_PATH).setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + + registry.addViewController(ROOT_CONTEXT_PATH + "/*").setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + + registry.addViewController(ROOT_CONTEXT_PATH + "/" + lastSegment + "/").setViewName("redirect:" + ROOT_CONTEXT_PATH + "/" + lastSegment + "/index.html"); + + registry.setOrder(Ordered.HIGHEST_PRECEDENCE); + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry theRegistry) { - theRegistry - .addResourceHandler("/static/**") - .addResourceLocations(appProperties.getStaticLocation()); - } } \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index f2a9269..fc94a82 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -64,7 +64,8 @@ hapi: ### 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/** - # staticLocation: file:/usr/somewhere/ + ### 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 # server_address: http://hapi.fhir.org/baseR4 # defer_indexing_for_codesystems_of_size: 101