Статьи

Spring Cloud Ribbon — Безопасный звонок

Что-то простое, но я недавно боролся с этим — мне нужно было позвонить клиенту Netflix Ribbon на защищенный удаленный сервис. Оказывается, есть два способа сделать это с помощью ленты Netflix, я продемонстрирую это через отличную поддержку Spring Cloud для библиотеки лент.

В двух предыдущих публикациях в блоге я затронул основы Spring Cloud Ribbon и некоторые расширенные настройки , продолжая этот же пример, предполагая, что у меня есть конфигурация по этим направлениям:

1
2
3
4
5
sampleservice:
  ribbon:
    listOfServers: someserver:80
    ReadTimeout: 5000
    MaxAutoRetries: 2

Учитывая эту конфигурацию, я могу вызвать сервис следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class RestTemplateSample {
  
    @Autowired
    private RestTemplate restTemplate;
  
    @Override
    public MessageAcknowledgement sendMessage(Message message) {
        String pongServiceUrl = "http://sampleservice/message";
        HttpEntity<Message> requestEntity = new HttpEntity<>(message);
        ResponseEntity<MessageAcknowledgement> response =  this.restTemplate.exchange(pongServiceUrl, HttpMethod.POST, requestEntity, MessageAcknowledgement.class, Maps.newHashMap());
        return response.getBody();
    }
  
}

Так что теперь, если удаленная служба защищена, первый подход и, вероятно, предпочтительный способ на самом деле довольно прост, просто добавьте дополнительную конфигурацию к «именованному» клиенту, чтобы указать, что удаленная служба безопасна, обратите внимание, что порт также должен быть правильно указано.

1
2
3
4
5
6
sampleservice:
  ribbon:
    listOfServers: someserver:443
    ReadTimeout: 5000
    MaxAutoRetries: 2
    IsSecure: true

Второй подход, который также работает, состоит в том, чтобы просто изменить URL, чтобы указать, что вы вызываете конечную точку https, на этот раз конфигурация IsSecure не требуется:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class RestTemplateSample {
  
    @Autowired
    private RestTemplate restTemplate;
  
    @Override
    public MessageAcknowledgement sendMessage(Message message) {
        String pongServiceUrl = "https://sampleservice/message";
        HttpEntity<Message> requestEntity = new HttpEntity<>(message);
        ResponseEntity<MessageAcknowledgement> response =  this.restTemplate.exchange(pongServiceUrl, HttpMethod.POST, requestEntity, MessageAcknowledgement.class, Maps.newHashMap());
        return response.getBody();
    }
  
}
Ссылка: Spring Cloud Ribbon — Безопасный звонок от нашего партнера по JCG Биджу Кунджуммена в блоге all and sundry.