RestTemplate с авторизацией на предъявителя - PullRequest
1 голос
/ 27 января 2020

Можно ли с помощью RestTemplateBuilder создать экземпляр RestTemplate только с заголовком и токеном на предъявителя?

Я знаю, что могу использовать обмен RestTemplate и установить внутри HttpEntity мои заголовки, но можно ли сделать что-то вроде это:

public RestTemplate getRestTemplate(){
    RestTemplateBuilder builder = new RestTemplateBuilder();
    return builder.build().exchange().setBearerAuth("token here"); //this is not possible
}

Надеюсь, вы понимаете, что я хочу сделать.

Ответы [ 3 ]

1 голос
/ 27 января 2020

вы можете использовать перехватчики для ввода токена в заголовки запроса, например,

    @Bean(name = "myRestTemplate")
    public RestTemplate collectCentRestTemplate(RestTemplateBuilder builder) {
        return builder.rootUri("some uri")
                .additionalInterceptors((ClientHttpRequestInterceptor) (request, body, execution) -> {
                    request.getHeaders().add("Bearer", "token");
                    return execution.execute(request, body);
                }).build();
    }

, а из вашего приложения вы можете просто использовать вот так

    @Autowired
    @Qualifier("myRestTemplate")
    private RestTemplate restTemplate;

имейте в виду, что вы можете по-прежнему использовать объект restTemplate как обычно, устанавливая заголовки и et c, , но заголовок Bearer всегда будет переопределен с "token", потому что перехватчики применяются прямо перед выполнением запроса

0 голосов
/ 27 января 2020

Вы можете использовать OAuth2RestTemplate , который предназначен специально для ваших целей.

0 голосов
/ 27 января 2020

Нет, это было предложено, и отклонено ( Предоставить удобные методы для заголовков в RestTemplateBuilder )

Я думаю, что самый простой способ на данный момент - это сделайте что-то вроде этого:

RequestEntity<Void> request = RequestEntity.post(url)
    .accept(MediaType.APPLICATION_JSON).header("foo", "bar").build();
restTemplate.exchange(request, String.class);

Я склонен согласиться с @wilkinsona, что добавление дополнительных методов убеждения может быть не таким полезным, как текущий метод basicAuthorization. Это довольно распространенное явление, и когда оно было добавлено, было очень больно создавать код самостоятельно (теперь это стало проще, поскольку в Spring 4.3.1 добавлен класс BasicAuthorizationInterceptor).

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

...