commit
8c20e6c1e9
|
@ -17,6 +17,7 @@
|
|||
package org.springframework.boot.autoconfigure.web.reactive;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
@ -163,14 +164,14 @@ public class WebFluxAutoConfiguration {
|
|||
|
||||
private final ObjectProvider<CodecCustomizer> codecCustomizers;
|
||||
|
||||
private final ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;
|
||||
private final ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizers;
|
||||
|
||||
private final ObjectProvider<ViewResolver> viewResolvers;
|
||||
|
||||
public WebFluxConfig(Environment environment, WebProperties webProperties, WebFluxProperties webFluxProperties,
|
||||
ListableBeanFactory beanFactory, ObjectProvider<HandlerMethodArgumentResolver> resolvers,
|
||||
ObjectProvider<CodecCustomizer> codecCustomizers,
|
||||
ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizer,
|
||||
ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizers,
|
||||
ObjectProvider<ViewResolver> viewResolvers) {
|
||||
this.environment = environment;
|
||||
this.resourceProperties = webProperties.getResources();
|
||||
|
@ -178,7 +179,7 @@ public class WebFluxAutoConfiguration {
|
|||
this.beanFactory = beanFactory;
|
||||
this.argumentResolvers = resolvers;
|
||||
this.codecCustomizers = codecCustomizers;
|
||||
this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizer.getIfAvailable();
|
||||
this.resourceHandlerRegistrationCustomizers = resourceHandlerRegistrationCustomizers;
|
||||
this.viewResolvers = viewResolvers;
|
||||
}
|
||||
|
||||
|
@ -210,19 +211,22 @@ public class WebFluxAutoConfiguration {
|
|||
logger.debug("Default resource handling disabled");
|
||||
return;
|
||||
}
|
||||
List<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizers = this.resourceHandlerRegistrationCustomizers
|
||||
.orderedStream()
|
||||
.toList();
|
||||
String webjarsPathPattern = this.webFluxProperties.getWebjarsPathPattern();
|
||||
if (!registry.hasMappingForPattern(webjarsPathPattern)) {
|
||||
ResourceHandlerRegistration registration = registry.addResourceHandler(webjarsPathPattern)
|
||||
.addResourceLocations("classpath:/META-INF/resources/webjars/");
|
||||
configureResourceCaching(registration);
|
||||
customizeResourceHandlerRegistration(registration);
|
||||
resourceHandlerRegistrationCustomizers.forEach((customizer) -> customizer.customize(registration));
|
||||
}
|
||||
String staticPathPattern = this.webFluxProperties.getStaticPathPattern();
|
||||
if (!registry.hasMappingForPattern(staticPathPattern)) {
|
||||
ResourceHandlerRegistration registration = registry.addResourceHandler(staticPathPattern)
|
||||
.addResourceLocations(this.resourceProperties.getStaticLocations());
|
||||
configureResourceCaching(registration);
|
||||
customizeResourceHandlerRegistration(registration);
|
||||
resourceHandlerRegistrationCustomizers.forEach((customizer) -> customizer.customize(registration));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -247,12 +251,6 @@ public class WebFluxAutoConfiguration {
|
|||
ApplicationConversionService.addBeans(registry, this.beanFactory);
|
||||
}
|
||||
|
||||
private void customizeResourceHandlerRegistration(ResourceHandlerRegistration registration) {
|
||||
if (this.resourceHandlerRegistrationCustomizer != null) {
|
||||
this.resourceHandlerRegistrationCustomizer.customize(registration);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -90,6 +90,7 @@ import org.springframework.web.reactive.HandlerMapping;
|
|||
import org.springframework.web.reactive.accept.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.config.BlockingExecutionConfigurer;
|
||||
import org.springframework.web.reactive.config.DelegatingWebFluxConfiguration;
|
||||
import org.springframework.web.reactive.config.ResourceHandlerRegistration;
|
||||
import org.springframework.web.reactive.config.WebFluxConfigurationSupport;
|
||||
import org.springframework.web.reactive.config.WebFluxConfigurer;
|
||||
import org.springframework.web.reactive.function.server.support.RouterFunctionMapping;
|
||||
|
@ -122,6 +123,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.BDDMockito.then;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
||||
/**
|
||||
* Tests for {@link WebFluxAutoConfiguration}.
|
||||
|
@ -182,6 +184,18 @@ class WebFluxAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCustomizeResources() {
|
||||
this.contextRunner.withUserConfiguration(ResourceHandlerRegistrationCustomizers.class).run((context) -> {
|
||||
ResourceHandlerRegistrationCustomizer customizer1 = context
|
||||
.getBean("firstResourceHandlerRegistrationCustomizer", ResourceHandlerRegistrationCustomizer.class);
|
||||
ResourceHandlerRegistrationCustomizer customizer2 = context
|
||||
.getBean("secondResourceHandlerRegistrationCustomizer", ResourceHandlerRegistrationCustomizer.class);
|
||||
then(customizer1).should(times(2)).customize(any(ResourceHandlerRegistration.class));
|
||||
then(customizer2).should(times(2)).customize(any(ResourceHandlerRegistration.class));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRegisterResourceHandlerMapping() {
|
||||
this.contextRunner.run((context) -> {
|
||||
|
@ -845,6 +859,21 @@ class WebFluxAutoConfigurationTests {
|
|||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class ResourceHandlerRegistrationCustomizers {
|
||||
|
||||
@Bean
|
||||
ResourceHandlerRegistrationCustomizer firstResourceHandlerRegistrationCustomizer() {
|
||||
return mock(ResourceHandlerRegistrationCustomizer.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
ResourceHandlerRegistrationCustomizer secondResourceHandlerRegistrationCustomizer() {
|
||||
return mock(ResourceHandlerRegistrationCustomizer.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class ViewResolvers {
|
||||
|
||||
|
|
Loading…
Reference in New Issue