WebClient - проблема с токеном CSRF - PullRequest
0 голосов
/ 11 февраля 2020

Я использую веб-клиент для получения токена CSRF, а затем использую тот же токен для запроса POST. URI для извлечения токена и вызова POST одинаковы. Проблема в том, что вызов POST выбрасывает 403 Запрещено в качестве ответа.

Подготовка WebClient:

WebClient webClient = WebClient.builder().baseUrl("https://test/uri")
            .filter("USER", "Password"))
            .exchangeStrategies(ExchangeStrategies.builder()
                    .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(-1)).build())
            .build();

Затем я получаю токен CSRF, используя код ниже

WebClient.RequestHeadersSpec<?> requestSpec2 =
        webClient.get().uri("https://test/uri").header("X-CSRF-TOKEN", "Fetch");
    ClientResponse clientResponse = requestSpec2.exchange().block();
    Headers headers = clientResponse.headers();
    List<String> headerList = headers.header("x-csrf-token");
    String csrfToken = headerList.get(0);

После описанного выше шага я делаю POST-вызов, который выдает 403 запрещенного ответа:

ClientResponse clientResponse = webClient.post().uri("https://test/uri").headers(headersConsumer -> {
  headersConsumer.set("X-CSRF-TOKEN", csrfToken);
  headersConsumer.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString());
}).cookies(cookies -> cookies.add("X-CSRF-TOKEN", csrfToken))
    .body(BodyInserters.fromValue(CustomerData)).exchange().block();

HttpStatus httpStatus = clientResponse.statusCode();

Проблема даже в предоставлении правильного токена CSRF, я получаю 403 запрещенного в качестве ответа. Не могли бы вы сообщить мне, что не так с подходом выше?

...