2017-04-05 72 views
1

目前,我正在跟隨一些教程,在java中使用spring和neflix堆棧創建微服務。 我遇到的一個問題是,我開始的每項服務似乎都受到生成密碼的保護。因此,另一個微服務不可能使用另一個微服務。 那麼一個微服務通過休息呼叫消耗另一個微服務的最佳和常見方式是什麼?我是否必須進一步調整application.yml以及如何?Spring Cloud微服務,與其他微服務一起使用密碼保護的微服務

下面是一個例子(非常粗糙和基本)。我有一個微型的服務調用另一個具有以下功能:

@RestController 
@SpringBootApplication 
public class BookstoreApplication { 

    @RequestMapping(value = "/recommended") 
    public String readingList(){ 
     return "Spring in Action (Manning), Cloud Native Java (O'Reilly), Learning Spring Boot (Packt)"; 
    } 

    public static void main(String[] args) { 
     System.setProperty("spring.config.name", "springTut2CircuitBreakers/circuitApplication"); 
     SpringApplication.run(BookstoreApplication.class, args); 
    } 
} 

其他微服務的監聽與以下代碼調用:

@RestController 
@SpringBootApplication 
public class ReadingApplication { 
    @RequestMapping("/to-read") 
    public String readingList() { 
     RestTemplate restTemplate = new RestTemplate(); 
     URI uri = URI.create("http://localhost:8090/recommended"); 

     return restTemplate.getForObject(uri, String.class); 
    } 

    public static void main(String[] args) { 
     System.setProperty("spring.config.name", "springTut2CircuitBreakers/readingApplication"); 
     SpringApplication.run(ReadingApplication.class, args); 
    } 
} 

當我嘗試使用與第一服務我被要求輸入密碼的瀏覽器。當我輸入時,我有權訪問它,但它顯示我有401錯誤,因爲第一個服務無法訪問第二個(我相信)。那麼如何防止這種情況發生?

編輯:固定複製粘貼錯誤(重複的代碼)

回答

0

我覺得當保安在這兩個服務已啓用,您需要發送的會話ID的其餘部分模板調用,比如下面的標題,

HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue()); 
HttpEntity requestEntity = new HttpEntity(null, requestHeaders); 
ResponseEntity rssResponse = restTemplate.exchange(
    "http://localhost:8090/recommended", 
    HttpMethod.GET, 
    requestEntity, 
    Rss.class); 
Rss rss = rssResponse.getBody();` 

這可能有助於在您的微服務之間進行休息模板調用(此餘下模板調用將相應地進行更改)。