В случае 401 несанкционированного удаления заголовка из RequestTemplate и повторите попытку - PullRequest
0 голосов
/ 22 июня 2019

Я вставляю заголовок авторизации в симулируемый запрос, но после 401 с сервера я повторяю попытку с тем же запросом и тем же заголовком, что приводит к той же ошибке.Если у меня истекает токен вручную, я получаю 2 старых и новых заголовка авторизации, что приводит к ошибке 400.До сих пор я не вижу способа удалить старый заголовок, и, насколько я понял, это было примерно так:

@Bean
public RequestInterceptor oauth2ApplicationRequestInterceptor() {
    return new OAuth2FeignRequestInterceptor(getOAuth2ClientContext(), oauth2ApplicationResourceDetails()) {
        @Override
        public void apply(RequestTemplate template) {
            if (template.headers().containsKey("Authorization")) {
                // if Authorization exists then remove it
            } else {
                super.apply(template);
            }
        }
    };

Истечение срока действия токена вручную - единственный способ для меня на данный момент, если сервер даетмне ошибка 401.

1 Ответ

0 голосов
/ 12 июля 2019

У меня такая же проблема.Вот способ, которым я решил это

@Override
public void apply(RequestTemplate template) {
    // We make a copy of the original headers
    Map<String, Collection<String>> originalHeaders = template.headers();
    // We copy the original headers in a new map
    Map<String, Collection<String>> newHeaders = new HashMap<String, Collection<String>>();
    for (Map.Entry<String, Collection<String>> originalEntry : originalHeaders.entrySet()) {
        // Except "Authorization" header
        if (!"Authorization".equals(originalEntry.getKey())) {
            newHeaders.put(originalEntry.getKey(), originalEntry.getValue());
        }
    }
    // This call will clear the template headers Map (see Feign sources)
    template.headers(null);
    // We add the new "Authorization" header to the new headers
    newHeaders.put("Authorization",
            Collections.singletonList(String.format("%s %s", OAuth2AccessToken.BEARER_TYPE, getToken())));
    // Add the headers to the template
    template.headers(newHeaders);
}
...