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