У меня есть сервер grpc-java, и мне нужно выполнить асинхронный вызов службы аутентификации перед обработкой запроса.Я думаю, что это должно быть сделано в перехватчике, но для этого требуется синхронно вернуть Listener из interceptCall ()
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, но авторизация запросов является сквозной проблемой, и перехватчики, кажется, идеальное место для этого.