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
Seguo il blog di Dave Syer da qui: http://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-applicazione singola pagina –