很简单,但是最近我为此感到困惑 –我必须对安全的远程服务进行基于Netflix Ribbon的客户端调用。 事实证明,使用Netflix Ribbon可以通过两种方式实现这一点,我将通过Spring Cloud对Ribbon库的出色支持来演示这一点。
在之前的两个博客文章中,我继续介绍了Spring Cloud Ribbon的基础知识和一些高级自定义 ,并继续同一示例,并假设我具有以下几方面的配置:
sampleservice:
ribbon:
listOfServers: someserver:80
ReadTimeout: 5000
MaxAutoRetries: 2
有了这个配置,我可以这样调用服务:
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();
}
}
因此,现在,如果远程服务受到保护,则第一种方法(可能是首选方法)实际上非常简单,只需向“命名”客户端添加其他配置以表明远程服务是安全的,请注意,端口也必须是安全的。适当指定。
sampleservice:
ribbon:
listOfServers: someserver:443
ReadTimeout: 5000
MaxAutoRetries: 2
IsSecure: true
第二种有效的方法是简单地更改url以指示您正在调用https端点,这一次不需要“ IsSecure”配置:
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();
}
}
翻译自: https://www.javacodegeeks.com/2016/02/spring-cloud-ribbon-making-secured-call.html