我有一个grpcjava服务器,需要在处理请求之前对auth服务进行异步调用。我认为这应该在拦截器中完成,但它需要从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发出异步调用,如果不能这样做,那么什么是正确的方法来异步验证请求呢?我知道可以通过streamobservators直接在grpc服务中完成,但是请求授权是一个跨领域的问题,拦截器似乎是一个完美的地方。
1条答案
按热度按时间rbpvctlc1#
你确实需要退票
ServerCall.Listener
. 但既然你不知道Listener
要委托给,可以重写Listener
将回调添加到队列。身份验证完成后,排空队列。