From 9ac6485768a6561fd8d690a5247a7ed6e1578416 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 21 Aug 2019 10:42:32 +0100 Subject: [PATCH] Prioritise static resource locations over classpath for favicon.ico Closes gh-17922 --- .../web/servlet/WebMvcAutoConfiguration.java | 10 +++++++++- .../web/servlet/WebMvcAutoConfigurationTests.java | 7 +++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java index 6b066e622f7..5a5e3f8cf6b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java @@ -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"); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java index 39c644d5b98..7d0510898ff 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java @@ -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 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