我正在讲讲Java中的grpc服务,并且试图弄清楚是否有可能拦截和修改请求。
我考虑根据protobuf中指定的编号修改grpc请求。
Protobuf样品:
message PersonRequest {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall
(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
// Get by number 1 (name from proto)
// change the name
// send the updated request
}
有没有办法做到这一点。
答案 0 :(得分:0)
您可以在以下服务器拦截器中修改请求消息。然后,您的serviceImpl将收到修改后的请求消息并进行处理。
import io.grpc.ForwardingServerCallListener.SimpleForwardingServerCallListener;
...
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
ServerCall<ReqT, RespT> call, Metadata headers,
ServerCallHandler<ReqT, RespT> next) {
ServerCall.Listener<ReqT> listener = next.startCall(call);
return new SimpleForwardingServerCallListener<ReqT>(listener) {
@Override
public void onMessage(ReqT message) {
ReqT modifiedMessage = modify(message);
delegate().onMessage(modifiedMessage);
}
};
}