spring - spring 中的 cors 配置有什么区别:`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("*");
}
};
}
带有消息:
无法处理请求 [OPTIONS http://localhost:30300/create]:响应状态 404,原因为“没有匹配的处理程序”
但这一个有效:
@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 配置将应用于RequestMappingHandlerMapping
由WebFluxConfigurationSupport
.
另一方面,也适用于RouterFunctionMapping
支持功能模型的。但该实现首先检查处理程序是否与传入请求匹配,然后在必要时将其作为 CORS 请求(例如,预检请求)进行处理。
有人可能会争辩说,这是故意的,目的是使RouterFunction
模型明确,而不是向开发人员隐藏任何东西。这CorsWebFilter
是一个更全局的机制,无论如何可能更适合功能模型,但您仍然可以将其视为增强请求并在https://jira.spring.io上创建一个新问题(请这样做!)。
推荐阅读
- regex - 使用正则表达式验证付款响应 [成功/拒绝]
- python - 当驱动程序找不到元素的 xpath 时如何返回“N/A”?
- typescript - 了解 typescript 代码何时完成编译并准备好在浏览器中运行的实际工作流程是什么?
- css - 如何修复 TouchableOpacity 被 SafeAreaView 阻止
- in-app-purchase - 如何在 Spring Boot 项目中从 Apple 服务器通知接收数据
- python - Python解释器在PyCharm中没有显示任何东西
- neovim - 全新安装后找不到配置文件
- typescript - 如何正确创建带有声明的 Typescript NPM 包?
- apache-flink - Apache Flink 1.13 版将表转换为数据集?
- python - 如何列出所有诗歌附加内容的名称?