web-dev-qa-db-ja.com

リダイレクト時にヘッダーをZuulに追加する

Zuulを使用して、どこか別のダウンストリームシステムに呼び出しをリダイレクトしようとしています。リダイレクトでは、apiが処理するリダイレクトを受信するために必要なデータを含むヘッダーを追加する必要があります。ダウンストリームシステムにこのデータを検出させることはできません。私のコードが添付されています。 Edgware.SR3, Spring Boot 1.5.12Zuulを使用しています

ズールフィルター

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

リダイレクトされたサービスコード

@RequestMapping(value = "/forward")
public ResponseEntity<String> forwardToMe(@RequestHeader(required = true, name = "api")String api){
    return new ResponseEntity<String>("Hi",HttpStatus.OK);
}

Postmanで受信したエラー

{"timestamp":1524737817729、 "status":400、 "error": "Bad Request"、 "exception": "org.springframework.web.bind.ServletRequestBindingException"、 "message": "Missing request header 'api' forタイプStringのメソッドパラメーター、「パス」:「/ forward」}

6
Bocky

Route Filterを使用すると思いますが、Pre Filter

カスタムヘッダーの追加は、context.addZuulRequestHeader("Authorization", "Basic " + credentials);のように実行できます。

リダイレクト部分については、これを確認できます thread

2
redoff

誰かがまだこの問題に直面している場合に備えて、ここでコメントを更新します。この問題を最近発見し、application.ymlに次の設定を追加することで解決しました

application.yml ... zuul: sensitive-headers: - Cookie,Set-Cookie ...

以下の参照リンク:
https://cloud.spring.io/spring-cloud-static/Dalston.SR5/multi/multi__router_and_filter_zuul.html

1
Thomas Tse