spring 中的 cors 配置有何不同:`CorsWebFilte`r 与 `WebFluxConfigurerComposite.addCorsMappings(CorsRegistry registry)`?
What is the difference in cors configuration in spring: `CorsWebFilte`r vs `WebFluxConfigurerComposite.addCorsMappings(CorsRegistry registry)`?
在我的具有 WebFlux 功能端点的应用程序中,此 cors 配置不起作用:
@Bean
WebFluxConfigurer corsConfigurer() {
return new WebFluxConfigurerComposite() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
};
}
留言:
Failed to handle request [OPTIONS http://localhost:30300/create]: Response status 404 with reason "No matching handler"
但是这个有效:
@Bean
CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
为什么?有什么区别?
WebFluxConfigurer
配置基础结构适用于 Spring WebFlux 中的注释模型和功能模型。
在这种情况下,CORS 配置应用于由 WebFluxConfigurationSupport
创建的 RequestMappingHandlerMapping
bean。
另一方面,它也适用于支持功能模型的RouterFunctionMapping
。但是该实现首先检查处理程序是否与传入请求匹配,然后在必要时将其作为 CORS 请求(例如,预检请求)选择性地处理。
有人可能会争辩说这是故意的,目的是使 RouterFunction
模型显式化,而不是对开发人员隐藏任何内容。 CorsWebFilter
是一种更全局的机制,无论如何可能更适合功能模型,但您仍然可以将其视为增强请求并在 https://jira.spring.io 上创建一个新问题(请这样做!)。
在我的具有 WebFlux 功能端点的应用程序中,此 cors 配置不起作用:
@Bean
WebFluxConfigurer corsConfigurer() {
return new WebFluxConfigurerComposite() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
};
}
留言:
Failed to handle request [OPTIONS http://localhost:30300/create]: Response status 404 with reason "No matching handler"
但是这个有效:
@Bean
CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
为什么?有什么区别?
WebFluxConfigurer
配置基础结构适用于 Spring WebFlux 中的注释模型和功能模型。
在这种情况下,CORS 配置应用于由 WebFluxConfigurationSupport
创建的 RequestMappingHandlerMapping
bean。
另一方面,它也适用于支持功能模型的RouterFunctionMapping
。但是该实现首先检查处理程序是否与传入请求匹配,然后在必要时将其作为 CORS 请求(例如,预检请求)选择性地处理。
有人可能会争辩说这是故意的,目的是使 RouterFunction
模型显式化,而不是对开发人员隐藏任何内容。 CorsWebFilter
是一种更全局的机制,无论如何可能更适合功能模型,但您仍然可以将其视为增强请求并在 https://jira.spring.io 上创建一个新问题(请这样做!)。