J'essaie d'utiliser Zuul
pour rediriger les appels vers un système en aval ailleurs. Dans la redirection, je dois ajouter un en-tête avec les données nécessaires pour que la variable api
reçoive la redirection à traiter. Je n'arrive pas à convaincre le système en aval de détecter ces données. Ci-joint mon code . J'utilise Zuul
de Edgware.SR3, Spring Boot 1.5.12
Filtre Zuul
@Component
public class RouteFilter extends ZuulFilter{
@Override
public Object run() {
//Testing to add header
context.getRequest().getParameterMap().put("api", new String[]{"api"});
context.getResponse().setHeader("api", api);
context.addZuulResponseHeader("api", "api");
context.addZuulRequestHeader("api", "api");
context.setSendZuulResponse(false);
context.put(FORWARD_TO_KEY, redirect_urls.get(key));
context.setResponseStatusCode(HttpStatus.SC_TEMPORARY_REDIRECT);
context.getResponse().sendRedirect(redirect_urls.get(key));
return null;
}
}
Code de service redirigé
@RequestMapping(value = "/forward")
public ResponseEntity<String> forwardToMe(@RequestHeader(required = true, name = "api")String api){
return new ResponseEntity<String>("Hi",HttpStatus.OK);
}
Erreur reçue dans Postman
{ "horodatage": 1524737817729, "statut": 400, "erreur": "Requête incorrecte", "exception": "org.springframework.web.bind.ServletRequestBindingException", "message": "En-tête de requête manquant 'api' pour le paramètre de méthode de type String", "la voie à suivre" }
Je suppose que vous utilisez un filtre Route, vous pouvez peut-être essayer avec un filtre Pre.
L'ajout d'un en-tête personnalisé peut être fait avec quelque chose comme ceci: context.addZuulRequestHeader("Authorization", "Basic " + credentials);
.
Pour la partie redirection, vous pouvez vérifier ceci thread