我有一个grpc-java服务器,需要在处理请求之前向身份验证服务发出异步调用。我认为这应该在拦截器中完成,但它要求从interceptCall()同步返回Listener。
class AuthInterceptor implements ServerInterceptor {
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
ServerCall<ReqT, RespT> call,
Metadata headers,
ServerCallHandler<ReqT, RespT> next
) {
String token = ""; //get token from headers
authService.authorize(token).subscribe(
ok -> // process the request
error -> call.close(Status.UNAUTHENTICATED, headers)
);
// Here we need to return a Listener, but we haven't started a call yet
}
}
所以问题是:如何从ServerInterceptor发起异步调用?如果无法实现,那么在grpc中异步验证请求的正确方式是什么?我知道可以直接在grpc服务中使用StreamObservers完成,但请求授权是跨越多个服务的通用问题,拦截器似乎是最佳选择。
DelayedListener
后得到了什么结果吗?我不太清楚如何将它们连接起来。 - Abhijit Sarkar