(Rest呼び出しを介して)カスタム認証プロバイダーに対して要求を認証するために、単純なspring-cloud-Netflix Apiゲートウェイ(リバースプロキシ)でZuulFilterを使用しようとしています。
フィルターは401の不正なリクエストを拒否し、それらのリクエストをプロキシされたサービスに転送しないでください。
ZuulFilterでもそれは可能ですか? Zuuls apiにドキュメント、例などが見つかりませんでした。
助言がありますか?
私はこれを機能させるために、いくつかの掘り下げを行いました。リクエストがまだキャッシュされていないことを確認してください。 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);
}
}
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
_に設定します
Spring Cloudで認証を使用する場合は、 Spring Security Cloud プロジェクトを試してください。