web-dev-qa-db-fra.com

Ajouter des en-têtes à Zuul lors de la réorientation

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" }

4
Bocky

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

1
redoff