Как включить CORS в AWS API Gateway через SDK Java - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над сервисом, который напрямую связывается с AWS через SDK Java. Когда я создаю шлюз API, я не вижу никакой возможности включить CORS, как это можно сделать через интерфейс консоли AWS, есть лиспособ сделать это через SDK?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я понял, создав метод вручную и настроив заголовки, например:

AmazonApiGateway amazonApiGateway;

private void putMethod(final RestApi restApi, final Resource resource, final HttpMethod httpMethod) throws AmazonClientException {
    PutMethodRequest putMethodRequest = new PutMethodRequest()
        .withOperationName(METHOD_OPERATION_NAME)
        .withHttpMethod(httpMethod.name())
        .withResourceId(resource.getId())
        .withRestApiId(restApi.getId())
        .withAuthorizationType("NONE");

    amazonApiGateway.putMethod(putMethodRequest);
}

private void putMethodIntegration(final RestApi restApi, final Resource resource, final HttpMethod httpMethod) throws AmazonClientException {
    PutIntegrationRequest putIntegrationRequest = new PutIntegrationRequest()
        .withRestApiId(restApi.getId())
        .withResourceId(resource.getId())
        .withHttpMethod(httpMethod.name())
        .withIntegrationHttpMethod(httpMethod.name())
        .withType(IntegrationType.HTTP);

    amazonApiGateway.putIntegration(putIntegrationRequest);
}

private void putMethodResponse(final RestApi restApi, final Resource resource, final HttpMethod httpMethod, final Map<String, Boolean> methodResponseParameters) throws AmazonClientException {
    amazonApiGateway.putMethodResponse(new PutMethodResponseRequest()
        .withRestApiId(restApi.getId())
        .withResourceId(resource.getId())
        .withHttpMethod(httpMethod.name())
        .withStatusCode("200")
        .withResponseModels(Collections.singletonMap("application/json", "Empty"))
        .withResponseParameters(methodResponseParameters));
}

private void putMethodIntegrationResponse(final RestApi restApi, final Resource resource, final HttpMethod httpMethod, final Map<String, String> parameters) throws AmazonClientException{
    final Map<String, String> dataPassThroughTemplate = new HashMap<>();
    dataPassThroughTemplate.put("application/json", "");

    amazonApiGateway.putIntegrationResponse(new PutIntegrationResponseRequest()
        .withRestApiId(restApi.getId())
        .withResourceId(resource.getId())
        .withHttpMethod(httpMethod.name())
        .withStatusCode("200")
        .withResponseParameters(parameters)
        .withResponseTemplates(dataPassThroughTemplate));
}

private Map<String, Boolean> getMethodResponseParameters() {
    final Map<String, Boolean> methodResponseParameters = new HashMap<>();
    methodResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Origin"), true);
    methodResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Headers"), true);
    methodResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Methods"), true);
    return methodResponseParameters;
}

private Map<String, String> getIntegrationResponseParameters() {
    final Map<String, String> integrationResponseParameters = new HashMap<>();
    integrationResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Origin"), "'*'");
    integrationResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Headers"), "'Content-Type,X-Amz-Date,Authorization,x-api-key,x-amz-security-token'");
    integrationResponseParameters.put(String.format(METHOD_RESPONSE_TEMPLATE, "Access-Control-Allow-Methods"), "'GET,POST,DELETE,PUT,PATCH,OPTIONS'");
    return integrationResponseParameters;
}
0 голосов
/ 30 ноября 2018

Вы можете включить CORS в AWS API Gateway, следуя Рекомендации AWS SDK для CORS в Java .

В документе объясняется настройка CORS с примером, включающим:

  • Создает конфигурацию CORS и устанавливает конфигурацию в сегменте

  • Извлекает конфигурацию и изменяет ее, добавляя правило

  • Добавляетизмененная конфигурация для корзины

  • Удаляет конфигурацию

...