7

Utilizzo il proxy Spring Cloud e Zuul come gateway per il servizio RESTful.Spring Boot + Cloud | Zuul Proxy | 404 Errore

Application Gateway (primavera Boot web app in esecuzione sulla porta 8080) codice rilevante: -

Classe principale: -

@SpringBootApplication 
@EnableZuulProxy 
public class WebfrontApplication extends WebMvcConfigurerAdapter { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(WebfrontApplication.class, args); 
    } 

}

Zuul Mapping: -

zuul: 
    routes: 
    customer: 
     path: /customer/** 
     url: http://localhost:9000/ 

Durante l'avvio dell'applicazione di interfaccia utente sopra, posso vedere nei miei registri che i mapping per prox sono registrati i: -

o.s.c.n.zuul.web.ZuulHandlerMapping  : Mapped URL path [/customer/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController] 

Il servizio REST (A Spring Boot web app in esecuzione sulla porta 9000) codice rilevante: -

@RestController 
@RequestMapping(value = "/customer") 
public class CustomerController { 

    @Autowired 
    private CustomerService customerService; 

    /** 
    * Get List of All customers. 
    * 
    * @return 
    */ 
    @RequestMapping(value = "/list", method = RequestMethod.GET) 
    public List<Customer> list(Principal principal) { 
     return customerService.list(); 
    } 
} 

Utilizzando un client di riposo (POSTINO nel mio caso) sono in grado per ottenere la risposta dall'endpoint sopra con successo (dopo aver preso cura del token di autenticazione).

Sto utilizzando AngularJS per l'applicazione UI per ottenere dati dall'endpoint REST.

codice in questione: -

angular.module('customerModule').factory('customerService',function($http) { 

    return { 
     customerList : function(){ 
      // PROBLEM !!!!! 
      // THIS CALL GIVES A 404 ERROR 
      return $http.get('/customer/list'); 
     } 
    }; 
}); 

La chiamata di cui sopra è restituire un errore 404: - Questo è ciò che il mio debugger Chrome mostra: -

Remote Address:127.0.0.1:8080 
Request URL:http://localhost:8080/customer/list 
Request Method:GET 
Status Code:404 Not Found 

intestazioni di richiesta: -

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,hi;q=0.6,ms;q=0.4 
Cache-Control:no-cache 
Connection:keep-alive 
Cookie:SESSION=2e1ac330-fe41-4ff4-8efb-81eaec12c8d1 
Host:localhost:8080 
Pragma:no-cache 
Referer:http://localhost:8080/ 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 
X-Auth-Token:2e1ac330-fe41-4ff4-8efb-81eaec12c8d1 

Testate di risposta: -

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Type:application/json; charset=UTF-8 
Date:Fri, 20 Mar 2015 04:00:36 GMT 
Date:Fri, 20 Mar 2015 04:00:36 GMT 
Expires:0 
Pragma:no-cache 
Pragma:no-cache 
Server:Jetty(9.2.9.v20150224) 
Transfer-Encoding:chunked 
X-Application-Context:bootstrap 
X-Content-Type-Options:nosniff 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 
X-XSS-Protection:1; mode=block 

Cosa c'è che non va qui? Le mappature sono errate o mi manca qualcos'altro?

risolto

Come per la risposta accettata, cambiando la mappatura Zuul funzionato quando cambiato in: -

zuul: 
routes: 
    resource: 
    path: /customer/** 
    url: http://localhost:9000/ 
    stripPrefix: false 
+0

Seguo il blog di Dave Syer da qui: http://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-applicazione singola pagina –

risposta

7

Non c'è mappatura per "/ list" sul server di risorse (in modo che sia a 404). È necessario impostare stripPrefix = false sulla dichiarazione del percorso o modificare il mapping della richiesta sul back-end su "/".

+0

Sto avendo un problema simile. Solo nel mio caso, mi dà un 405 (Non permesso) quando 'POST'ing, ma' GET' funziona bene. Potresti aiutare con questo? – cst1992

-1

si può anche provare la seguente configurazione se non si desidera impostare la proprietà stripPrefix:

zuul: 
    routes: 
    customer: 
     path: /customer/** 
     url: http://localhost:9000/customer 
Problemi correlati