web-dev-qa-db-ja.com

リクエストを拒否するためのNetflixOSSZuulフィルター

(Rest呼び出しを介して)カスタム認証プロバイダーに対して要求を認証するために、単純なspring-cloud-Netflix Apiゲートウェイ(リバースプロキシ)でZuulFilterを使用しようとしています。

フィルターは401の不正なリクエストを拒否し、それらのリクエストをプロキシされたサービスに転送しないでください。

ZuulFilterでもそれは可能ですか? Zuuls apiにドキュメント、例などが見つかりませんでした。

助言がありますか?

17
Thomas Jäckle

私はこれを機能させるために、いくつかの掘り下げを行いました。リクエストがまだキャッシュされていないことを確認してください。 ZuulFilter内のrun()メソッドからこのメソッドを呼び出すだけです。

/**
 * Reports an error message given a response body and code.
 * 
 * @param body
 * @param code
 */
private void setFailedRequest(String body, int code) {
    log.debug("Reporting error ({}): {}", code, body);
    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.setResponseStatusCode(code);
    if (ctx.getResponseBody() == null) {
        ctx.setResponseBody(body);
        ctx.setSendZuulResponse(false);
    }
}
24
abeauchamp

preフィルターを使用してリクエストの認証を確認し、リクエストが許可されていない場合は_401_を返し、バックエンドサービスを呼び出さなくなりました。私は次のようにrun()関数でそれを行います:

_RequestContext ctx = getCurrentContext();
// do something to check the authentication
if(auth failed){
  ctx.unset();
  ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
_

ctx.unset()このリクエストを停止するようにコンテキストに指示し、ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value()); httpコードを_401_に設定します

Netflix Zuul-ブロックリクエストルーティング も参照

4
Bruce

Spring Cloudで認証を使用する場合は、 Spring Security Cloud プロジェクトを試してください。

1
Tyutyutyu