2017-04-05 2 views
1

actuellement je suis quelques tutoriels pour créer des micro services en java avec ressort et la pile de neflix. Un problème que j'ai est que chaque service que je commence semble être protégé par un mot de passe généré. Il n'est donc pas possible pour un autre microservice d'en utiliser un autre à cause de cela. Alors, quel est le meilleur moyen pour un micro-service d'en consommer un autre via un appel au repos? Dois-je ajuster l'application.yml plus loin et comment?Spring Nuage Microservice, consommer mot de passe protégé micro service avec d'autres services micro

Voici un exemple (très rugueux et de base). J'ai un service de micro qui appelle un autre avec la fonction suivante:

@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); 
    } 
} 

L'autre service de micro écoute cet appel avec le code suivant:

@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); 
    } 
} 

Lorsque je tente d'utiliser le premier service avec un navigateur, je suis invité à entrer un mot de passe. Quand j'y entre, j'y ai accès mais il me montre une erreur de 401 parce que le premier service n'a pas pu accéder à la seconde (je crois). Alors, comment puis-je empêcher cela?

Edit: erreur Copier coller fixe (code dupliqué)

Répondre

0

Je pense que lorsque la sécurité est activée dans les deux services, vous devez envoyer la session Id dans l'en-tête de l'appel de modèle reste comme ci-dessous,

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();` 

Cela peut vous aider à effectuer des appels de modèle de repos entre vos microservices (cet appel de modèle de repos doit être modifié en conséquence).