Remove default favicon and support for serving from classpath root

Closes gh-17925
This commit is contained in:
Andy Wilkinson
2019-08-22 13:53:13 +01:00
parent e03f822c6d
commit 05e089601e
5 changed files with 16 additions and 55 deletions

View File

@@ -332,27 +332,6 @@ public class WebMvcAutoConfiguration {
return new OrderedRequestContextFilter();
}
@Configuration(proxyBeanMethods = false)
@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(this.resourceProperties.getStaticLocations())
.addResourceLocations("classpath:favicon.ico");
}
}
}
}
/**

View File

@@ -699,12 +699,6 @@
"name": "spring.mustache.suffix",
"defaultValue": ".mustache"
},
{
"name": "spring.mvc.favicon.enabled",
"type": "java.lang.Boolean",
"description": "Whether to enable resolution of favicon.ico.",
"defaultValue": true
},
{
"name": "spring.mvc.formcontent.putfilter.enabled",
"type": "java.lang.Boolean",

View File

@@ -196,7 +196,7 @@ class WebMvcAutoConfigurationTests {
@Test
void resourceHandlerMappingDisabled() {
this.contextRunner.withPropertyValues("spring.resources.add-mappings:false")
.run((context) -> assertThat(getResourceMappingLocations(context)).hasSize(1));
.run((context) -> assertThat(getResourceMappingLocations(context)).hasSize(0));
}
@Test
@@ -378,21 +378,6 @@ class WebMvcAutoConfigurationTests {
.containsOnly("myViewResolver"));
}
@Test
void faviconMapping() {
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
void faviconMappingDisabled() {
this.contextRunner.withPropertyValues("spring.mvc.favicon.enabled:false")
.run((context) -> assertThat(getResourceMappingLocations(context).get("/favicon.ico")).isNull());
}
@Test
void defaultAsyncRequestTimeout() {
this.contextRunner.run((context) -> assertThat(ReflectionTestUtils
@@ -660,14 +645,12 @@ class WebMvcAutoConfigurationTests {
private void assertCachePeriod(AssertableWebApplicationContext context) {
Map<String, Object> handlerMap = getHandlerMap(context.getBean("resourceHandlerMapping", HandlerMapping.class));
assertThat(handlerMap).hasSize(3);
assertThat(handlerMap).hasSize(2);
for (Entry<String, Object> entry : handlerMap.entrySet()) {
if (!entry.getKey().equals("/favicon.ico")) {
Object handler = entry.getValue();
if (handler instanceof ResourceHttpRequestHandler) {
assertThat(((ResourceHttpRequestHandler) handler).getCacheSeconds()).isEqualTo(5);
assertThat(((ResourceHttpRequestHandler) handler).getCacheControl()).isNull();
}
Object handler = entry.getValue();
if (handler instanceof ResourceHttpRequestHandler) {
assertThat(((ResourceHttpRequestHandler) handler).getCacheSeconds()).isEqualTo(5);
assertThat(((ResourceHttpRequestHandler) handler).getCacheControl()).isNull();
}
}
}
@@ -784,7 +767,7 @@ class WebMvcAutoConfigurationTests {
private void assertCacheControl(AssertableWebApplicationContext context) {
Map<String, Object> handlerMap = getHandlerMap(context.getBean("resourceHandlerMapping", HandlerMapping.class));
assertThat(handlerMap).hasSize(3);
assertThat(handlerMap).hasSize(2);
for (Object handler : handlerMap.keySet()) {
if (handler instanceof ResourceHttpRequestHandler) {
assertThat(((ResourceHttpRequestHandler) handler).getCacheSeconds()).isEqualTo(-1);
@@ -795,7 +778,12 @@ class WebMvcAutoConfigurationTests {
}
protected Map<String, List<Resource>> getResourceMappingLocations(ApplicationContext context) {
return getMappingLocations(context.getBean("resourceHandlerMapping", HandlerMapping.class));
Object bean = context.getBean("resourceHandlerMapping");
if (bean instanceof HandlerMapping) {
return getMappingLocations(context.getBean("resourceHandlerMapping", HandlerMapping.class));
}
assertThat(bean.toString()).isEqualTo("null");
return Collections.emptyMap();
}
protected List<ResourceResolver> getResourceResolvers(ApplicationContext context, String mapping) {

View File

@@ -2508,9 +2508,9 @@ welcome page of the application.
[[boot-features-spring-mvc-favicon]]
==== Custom Favicon
Spring Boot looks for a `favicon.ico` in the configured static content locations and the
root of the classpath (in that order). If such a file is present, it is automatically
used as the favicon of the application.
As with other static resources, Spring Boot looks for a `favicon.ico` in the configured
static content locations. If such a file is present, it is automatically used as the
favicon of the application.
[[boot-features-spring-mvc-pathmatch]]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B