Я использую веб-клиент для получения токена 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 запрещенного в качестве ответа. Не могли бы вы сообщить мне, что не так с подходом выше?