代码之家  ›  专栏  ›  技术社区  ›  Rumid

spring中cors配置的区别是什么:`CorsWebFilte`r与`WebFluxConfigurerComposite.addCorsMappings(CorsRegistry registry)`?

  •  2
  • Rumid  · 技术社区  · 6 年前

    @Bean
    WebFluxConfigurer corsConfigurer() {
        return new WebFluxConfigurerComposite() {
    
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("*")
                        .allowedHeaders("*");
            }
        };
    }
    

    带消息:

    无法处理请求[选项] http://localhost:30300/create]

    但这个有效:

    @Bean
    CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
    
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
    
        return new CorsWebFilter(source);
    }
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   Brian Clozel    6 年前

    WebFluxConfigurer 配置基础设施适用于springwebflux中的注释模型和功能模型。

    在这种情况下,CORS配置应用于 RequestMappingHandlerMapping WebFluxConfigurationSupport .

    另一方面,它也适用于 RouterFunctionMapping 支持功能模型。但该实现首先检查处理程序是否与传入请求匹配,然后根据需要将其作为CORS请求(例如,飞行前请求)进行处理。

    有人可能会说,这是故意的,使 RouterFunction 显式建模,不向开发人员隐藏任何内容。这个 CorsWebFilter 是一个更全局的机制,可能更适合功能模型,但您仍然可以将其视为一个增强请求,并在上创建一个新问题 https://jira.spring.io (请说!)。