Какая разница в конфигурации cors весной: `CorsWebFilte`r против` WebFluxConfigurerComposite.addCorsMappings (реестр CorsRegistry) `? - PullRequest
0 голосов
/ 10 октября 2018

В моем приложении с функциональными конечными точками WebFlux эта конфигурация cors не работала:

@Bean
WebFluxConfigurer corsConfigurer() {
    return new WebFluxConfigurerComposite() {

        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("*")
                    .allowedHeaders("*");
        }
    };
}

с сообщением:

Не удалось обработать запрос [ОПЦИИ 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);
}

Почему?В чем разница?

1 Ответ

0 голосов
/ 10 октября 2018

Инфраструктура конфигурации WebFluxConfigurer применяется к модели аннотаций и функциональной модели в Spring WebFlux.

В этом случае конфигурация CORS применяется к бину RequestMappingHandlerMapping, который создается WebFluxConfigurationSupport.

С другой стороны, она также применяется к RouterFunctionMapping, которыйподдерживает функциональную модель.Но эта реализация сначала проверяет, соответствует ли обработчик входящему запросу, а затем при необходимости обрабатывает его как запрос CORS (например, запрос предварительной проверки).

Можно утверждать, что это специально, чтобысделайте модель RouterFunction явной и не скрывайте ничего от разработчиков.CorsWebFilter является более глобальным механизмом, вероятно, более подходящим для функциональной модели в любом случае, но вы все равно можете рассматривать это как запрос на расширение и создать новую проблему на https://jira.spring.io (пожалуйста!).

...