Используйте токен в RestTemplate - PullRequest
0 голосов
/ 01 июля 2018

Я хочу использовать этот код RestTemplate для выполнения запросов POST.

@Bean(name = "simpleRestTemplate")
    public RestTemplate getRestClient() {

        RestTemplate restClient = new RestTemplate(getClientHttpRequestFactory());
        restClient.getInterceptors().add(new BasicAuthorizationInterceptor("username", "password"));
        HttpEntity<PaymentTransaction> request = new HttpEntity<>(new PaymentTransaction());
        ResponseEntity<PaymentTransaction> response = restClient.exchange("http://example.com", HttpMethod.POST,
                request, PaymentTransaction.class);
        PaymentTransaction foo = response.getBody();

        return restClient;
    }

Как добавить аутентификацию Toke в ссылку HTTP?

Наверное, самый простой способ - использовать exchange("http://example.com" + "/" + token, HttpMethod.POST,

Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Как прокомментировал @nickb, аутентификацию лучше всего выполнять в заголовках HTTP.

Если вам действительно нужно вставить токен в URL, вы можете реализовать собственный перехватчик.

Псевдокод:

final String tokenValue = "something";

restClient.getInterceptors().add(new ClientHttpRequestInterceptor() {

    @Override
    ClientHttpResponse intercept(HttpRequest request,
                         byte[] body,
                         ClientHttpRequestExecution execution)
                         throws java.io.IOException {

        URI modifiedUri = UriComponentsBuilder.fromUri(request.getURI())
        .query("token={tokenPlaceholder}")
        .buildAndExpand(tokenValue)
        .toUri();

        request.setURI(modifiedUri);
    }
});

Есть много причин не делать этого, например:

  1. Системы, которые перехватывают и регистрируют URL, также регистрируют токен, позволяя третьим лицам выдавать себя за ваших пользователей
  2. Вам необходимо проанализировать токен из URL, обрабатывая остальную часть запроса в теле запроса POST

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/ClientHttpRequestInterceptor.html

0 голосов
/ 01 июля 2018

Выезд UriComponentsBuilder:

URI uri = UriComponentsBuilder.fromUriString("http://example.com")
    .pathSegment(token)
    .build()
    .toUri();

Тогда вы можете использовать exchange(), который принимает URI в качестве первого параметра.

restClient.exchange(uri, HttpMethod.POST, request, PaymentTransaction.class);
...