Skip to content

Commit bd21c43

Browse files
committed
Simplify resource registration
Simplify resource registration by using the new Spring Framework API that allows `Resource` instances to be registered directly. See gh-24745
1 parent f1fcfa6 commit bd21c43

File tree

1 file changed

+14
-42
lines changed

1 file changed

+14
-42
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java

Lines changed: 14 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
package org.springframework.boot.autoconfigure.web.servlet;
1818

1919
import java.time.Duration;
20-
import java.util.HashSet;
2120
import java.util.List;
2221
import java.util.ListIterator;
2322
import java.util.Locale;
2423
import java.util.Map;
25-
import java.util.Set;
24+
import java.util.function.Consumer;
2625

2726
import javax.servlet.Servlet;
2827
import javax.servlet.ServletContext;
@@ -95,7 +94,6 @@
9594
import org.springframework.web.servlet.DispatcherServlet;
9695
import org.springframework.web.servlet.FlashMapManager;
9796
import org.springframework.web.servlet.HandlerExceptionResolver;
98-
import org.springframework.web.servlet.HandlerMapping;
9997
import org.springframework.web.servlet.LocaleResolver;
10098
import org.springframework.web.servlet.ThemeResolver;
10199
import org.springframework.web.servlet.View;
@@ -111,14 +109,12 @@
111109
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
112110
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
113111
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;
114-
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
115112
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
116113
import org.springframework.web.servlet.i18n.FixedLocaleResolver;
117114
import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver;
118115
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
119116
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
120117
import org.springframework.web.servlet.resource.EncodedResourceResolver;
121-
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
122118
import org.springframework.web.servlet.resource.ResourceResolver;
123119
import org.springframework.web.servlet.resource.ResourceUrlProvider;
124120
import org.springframework.web.servlet.resource.VersionResourceResolver;
@@ -348,8 +344,6 @@ public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfigurat
348344

349345
private ResourceLoader resourceLoader;
350346

351-
private final Set<String> autoConfiguredResourceHandlers = new HashSet<>();
352-
353347
@SuppressWarnings("deprecation")
354348
public EnableWebMvcConfiguration(
355349
org.springframework.boot.autoconfigure.web.ResourceProperties resourceProperties,
@@ -402,59 +396,37 @@ public RequestMappingHandlerMapping requestMappingHandlerMapping(
402396
resourceUrlProvider);
403397
}
404398

405-
@Bean
406-
@Override
407-
public HandlerMapping resourceHandlerMapping(ContentNegotiationManager contentNegotiationManager,
408-
FormattingConversionService conversionService, ResourceUrlProvider resourceUrlProvider) {
409-
HandlerMapping mapping = super.resourceHandlerMapping(contentNegotiationManager, conversionService,
410-
resourceUrlProvider);
411-
if (mapping instanceof SimpleUrlHandlerMapping) {
412-
addServletContextResourceHandlerMapping((SimpleUrlHandlerMapping) mapping);
413-
}
414-
return mapping;
415-
}
416-
417-
private void addServletContextResourceHandlerMapping(SimpleUrlHandlerMapping mapping) {
418-
Map<String, ?> urlMap = mapping.getUrlMap();
419-
String pattern = this.mvcProperties.getStaticPathPattern();
420-
Object handler = urlMap.get(pattern);
421-
if (handler instanceof ResourceHttpRequestHandler
422-
&& this.autoConfiguredResourceHandlers.contains(pattern)) {
423-
addServletContextResourceHandlerMapping((ResourceHttpRequestHandler) handler);
424-
}
425-
}
426-
427-
private void addServletContextResourceHandlerMapping(ResourceHttpRequestHandler handler) {
428-
ServletContext servletContext = getServletContext();
429-
if (servletContext != null) {
430-
List<Resource> locations = handler.getLocations();
431-
locations.add(new ServletContextResource(servletContext, SERVLET_LOCATION));
432-
}
433-
}
434-
435399
@Override
436400
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
437401
super.addResourceHandlers(registry);
438402
if (!this.resourceProperties.isAddMappings()) {
439403
logger.debug("Default resource handling disabled");
440404
return;
441405
}
406+
ServletContext servletContext = getServletContext();
442407
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
443-
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(),
444-
this.resourceProperties.getStaticLocations());
445-
408+
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
409+
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
410+
if (servletContext != null) {
411+
registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
412+
}
413+
});
446414
}
447415

448416
private void addResourceHandler(ResourceHandlerRegistry registry, String pattern, String... locations) {
417+
addResourceHandler(registry, pattern, (registration) -> registration.addResourceLocations(locations));
418+
}
419+
420+
private void addResourceHandler(ResourceHandlerRegistry registry, String pattern,
421+
Consumer<ResourceHandlerRegistration> customizer) {
449422
if (registry.hasMappingForPattern(pattern)) {
450423
return;
451424
}
452425
ResourceHandlerRegistration registration = registry.addResourceHandler(pattern);
453-
registration.addResourceLocations(locations);
426+
customizer.accept(registration);
454427
registration.setCachePeriod(getSeconds(this.resourceProperties.getCache().getPeriod()));
455428
registration.setCacheControl(this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl());
456429
customizeResourceHandlerRegistration(registration);
457-
this.autoConfiguredResourceHandlers.add(pattern);
458430
}
459431

460432
private Integer getSeconds(Duration cachePeriod) {

0 commit comments

Comments
 (0)