Affects: 5.3.3 Affected component: WebFlux
I created a configuration that roughly looks like this:
@EnableWebFlux
@Configuration
class WebfluxConfig : WebFluxConfigurer {
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
registry.addResourceHandler("/public/**")
.addResourceLocations("classpath:/public/")
}
override fun addCorsMappings(registry: CorsRegistry) {
registry.addMapping("/public/**")
.allowedMethods("GET", "OPTIONS")
.allowedOriginPatterns("*")
}
}
Expectation:
A GET / OPTIONS request to http://localhost:8080/public/path/to/file should return with CORS headers.
Actual result: CORS headers seem to be missing.
Possible cause:
In the bean declaration there seems to be no call to setCorsConfigurations() / configureAbstractHandlerMapping(), although there is in case of RequestMappingHandler and RouterFunctionMapping.
FWIW, in the MVC counterpart, this call seems to exist.
I tried adding that line using a breakpoint, after which CORS started working for me.
Sorry if I'm missing something obvious -- I'm just getting started with WebFlux. 😄 For the time being I guess I'll resort to a WebFilter.
Comment From: rstoyanchev
ResourceWebHandler needs to be declared as CorsConfigurationSource in order to be considered as a handler that supports CORS. It looks like that's missing right now unlike the ResourceHttpRequestHandler for Spring MVC.
Comment From: rstoyanchev
Never mind that. It's unrelated to ResourceWebHandler implenting CorsConfigurationSource. It seems that indeed WebFluxConfigurer#addCorsMapping simply doesn't apply to static resources. The Javadoc mentions only annotated controllers and functional endpoints.