Как обрабатывать запросы HTTP OPTIONS в Spring Boot 2 с помощью webflux? - PullRequest
0 голосов
/ 09 октября 2018

Я сконфигурировал cors следующим образом:

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

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

, и мой POST выглядит так:

@Bean
RouterFunction<ServerResponse> routes() {
    return route(POST("/create")
                          .and(accept(APPLICATION_JSON))
                          .and(contentType(APPLICATION_JSON)), serverRequest 
                                 -> create(serverRequest);
}

В любом случае мое угловое приложение не может сделать никакого запроса, пока я не добавлю OPTIONS route следующим образом:

@Bean
RouterFunction<ServerResponse> routes() {
    return route(POST("/create")
                          .and(accept(APPLICATION_JSON))
                          .and(contentType(APPLICATION_JSON)), serverRequest 
                                 -> create(serverRequest)
         .andRoute(OPTIONS("/create"), serverRequest -> ServerResponse.ok().build());
}

Это необходимо?Есть ли способ удалить эту опцию обработки?

Ответы [ 3 ]

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

Это зависит от.

Если ваша внутренняя и внешняя части построены на одном и том же сервере и используют один и тот же порт, нет необходимости поддерживать OPTIONS.

Если нет, вы должны поддерживатьОПЦИИ, потому что он используется для определения того, какие методы разрешены на вашем сервере, чтобы запретить / разрешить CORS (обмен ресурсами между источниками).

Все последние современные браузеры реализованы в CORS, отправляя HTTP-опции для проверки.Если ваш сервер откажется или откажется, браузер заблокирует ваш запрос.

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

Не думаю, что это поддерживается функциональными конечными точками WebFlux.Справочная документация Spring Framework указывает на CorsWebFilter вместо .

. Вы можете определить CorsWebFilter @Bean и настроить его на пользовательский CorsConfiguration, чтобы добиться того же.

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

ОПЦИИ - это предполетные запросы при совместном использовании ресурсов между источниками (CORS), и они необходимы для выполнения запросов из разных источников.

Этот предполетный запрос выполняется некоторыми браузерами в качестве меры безопасностичтобы сервер доверял выполненному запросу, чтобы сервер понимал метод, происхождение и заголовки, отправляемые по запросу, являются безопасными.

так работает процесс:

  1. clientотправьте запрос на сервер с OPTIONS
  2. , если OPTIONS Request в порядке, тогда клиент отправит фактический запрос на сервер.

вам также может понадобиться выставить заголовки.

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

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