Prioritise static resource locations over classpath for favicon.ico

Closes gh-17922
This commit is contained in:
Andy Wilkinson 2019-08-21 10:42:32 +01:00
parent 55c6ee71c1
commit 9ac6485768
2 changed files with 14 additions and 3 deletions

View File

@ -336,10 +336,18 @@ public class WebMvcAutoConfiguration {
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration implements WebMvcConfigurer {
private final ResourceProperties resourceProperties;
FaviconConfiguration(ResourceProperties resourceProperties) {
this.resourceProperties = resourceProperties;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("favicon.ico")) {
registry.addResourceHandler("favicon.ico").addResourceLocations("classpath:favicon.ico");
registry.addResourceHandler("favicon.ico")
.addResourceLocations(this.resourceProperties.getStaticLocations())
.addResourceLocations("classpath:favicon.ico");
}
}

View File

@ -380,8 +380,11 @@ class WebMvcAutoConfigurationTests {
@Test
void faviconMapping() {
this.contextRunner
.run((context) -> assertThat(getResourceMappingLocations(context).get("/favicon.ico")).hasSize(1));
this.contextRunner.run((context) -> {
List<Resource> favIconResources = getResourceMappingLocations(context).get("/favicon.ico");
assertThat(favIconResources.stream().map(ClassPathResource.class::cast).map(ClassPathResource::getPath))
.containsExactly("META-INF/resources/", "resources/", "static/", "public/", "favicon.ico");
});
}
@Test