We have a gPRC service that needs to set auth/identity information in a
ThreadLocal variable in a class for it to correctly call another service.
The gPRC service gets the auth/identiy information from request so I am
thinking to use interceptor.
To start, I have some code looking as follows.
public class ImpersonationInterceptor {
public <ReqT, RespT> interceptCall(
ServerCall<ReqT, RespT> serverCall, Metadata headers,
ServerCallHandler<ReqT, RespT> next) {
Principal principal = ... // get the identify from the request
AuthContext.setPrincipal(principal); // underneath it uses a
ThreadLocal.
return next.startCall(
new SimpleForwardingServerCall<>(call) {
public void close(Status status, Metadata trailers) {
AuthContext.setPrincipal(null); // clear the identity
}
}
)
}
}
Questions.
* The execution of the service method itself may not lie on the same thread
to execute the interceptor, is that right?
* If true, the above is not gonna work, then the question is, what is the
canonical way to set ThreadLocal variable in gRPC world? I know gRPC has
Context support since 0.12, but in my case, I have to use the AuthContext's
ThreadLocal mechanism.
Thanks very much in advance.
Chen
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/74e91125-5334-46c4-96e5-54a17355b68a%40googlegroups.com.