Все время я использовал RestTemplate и решил переключиться на WebClient.
Перед отправкой запроса я подписываю тело запроса закрытым ключом, а клиент проверяет запрос открытым ключом.
Мой перехватчик:
private static class SignatureClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
private final PrivateKey privateKey;
private SignatureClientHttpRequestInterceptor(String privateKeyLocation) {
this.privateKey = PemUtils.getPrivateKey(Paths.get(privateKeyLocation));
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
if (request.getMethod() == HttpMethod.POST) {
request.getHeaders().add("X-Signature", Base64.getEncoder().encodeToString(PemUtils.signData(privateKey, SignatureAlgorithm.RS256.getJcaName(), body)));
}
return execution.execute(request, body);
}
}
Но в WebClient я не нашел такой возможности в ExchangeFilterFunction.
Есть ли возможность сделать это в WebClient или я должен вручную подписать тело запроса перед отправкой?