Как я могу добавить функциональность CORS в мой http-шлюз (spring -gration-dsl)? - PullRequest
0 голосов
/ 29 июня 2019

У меня есть интерфейс activjs, который отправляет запрос в мой API на основе Spring-интеграции.

Проблема, которую я получил, заключается в том, что я не знаю, как связать функциональность CORS в моем шлюзе.

Я пробовал что-то подобное

  @Bean
    public CrossOrigin cors(){
        CrossOrigin c = new CrossOrigin();
        c.setOrigin("/**");
        return c;
    }
@Bean
    public IntegrationFlow httpGetTest() {
        return IntegrationFlows.from(httpGetGateTest()).channel("http.test.channel").handle("testEndpoint", "hello").get();
    }
@Bean
    public MessagingGatewaySupport httpGetGateTest() {
        HttpRequestHandlingMessagingGateway handler = new HttpRequestHandlingMessagingGateway();
        handler.setRequestMapping(createMapping(new HttpMethod[]{HttpMethod.GET}, "/test"));
        handler.setCrossOrigin(cors());
        handler.setHeaderMapper(headerMapper());
        return handler;
    }

Запрос:

axios.get('http://localhost:8080/test')
    .then(res=>{console.log(res)})

Моя конечная точка возвращает "Hello World"

Failed to load resource: the server responded with a status of 415 ()
Access to XMLHttpRequest at 'http://localhost:8080/test' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

1 Ответ

1 голос
/ 29 июня 2019

Прежде всего, пожалуйста, убедитесь, что ваш клиент действительно отправляет заголовок HTTP-запроса Origin. В противном случае фильтрация CORS не применяется к запросу: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Хотя это звучит так, как будто все равно есть: from origin 'http://localhost:3000'.

Подумайте о том, чтобы изменить setOrigin("/**") на setOrigin("*"). Политика перекрестного происхождения касается всего ULR (точнее, домена), а не относительного пути.

Кстати, в Spring Integration для HTTP-компонентов есть фабрика Java DSL:

@Bean
public IntegrationFlow httpGetTest() {
    return IntegrationFlows.from(Http.inboundGateway("/test")
                .requestMapping(r -> r.methods(HttpMethod.GET))
                .crossOrigin(cors -> cors.origin("*"))
                .headerMapper(headerMapper()))
          .channel("http.test.channel")
          .handle("testEndpoint", "hello")
          .get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...