import org.springframework.context.ApplicationContext;
import org.springframework.data.redis.core.RedisTemplate;
import io.grpc.ForwardingServerCall;
import io.grpc.Metadata;
import io.grpc.ServerCall;
import io.grpc.ServerCallHandler;
import io.grpc.ServerInterceptor;
import io.grpc.Status;
import io.netty.util.internal.StringUtil;
public class MyServerInsterceptor implements ServerInterceptor{
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call,Metadata headers, ServerCallHandler<ReqT, RespT> next) {
//获取客户端参数
Metadata.Key<String> token = Metadata.Key.of("token", Metadata.ASCII_STRING_MARSHALLER);
String tokenStr = headers.get(token);
if (StringUtil.isNullOrEmpty(tokenStr)){
System.err.println("没有接收到相应的Token值");
}
return next.startCall(serverCall,headers);
}
}
import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.ClientCall;
import io.grpc.ClientInterceptor;
import io.grpc.ForwardingClientCall.SimpleForwardingClientCall;
import io.grpc.ForwardingClientCallListener.SimpleForwardingClientCallListener;
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import java.util.logging.Logger;
/**
* A interceptor to handle client header.
*/
public class MyClientInterceptor implements ClientInterceptor {
private static final Logger logger = Logger.getLogger(MyClientInterceptor.class.getName());
Metadata.Key<String> token = Metadata.Key.of("token", Metadata.ASCII_STRING_MARSHALLER);
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions, Channel next) {
return new SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
super.start(new SimpleForwardingClientCallListener<RespT>(responseListener) {
@Override
public void onHeaders(Metadata headers) {
headers.put(token, "自定义Token值");
super.onHeaders(headers);
}
}, headers);
}
};
}
}
server = ServerBuilder.forPort(port)
.addService(new GreeterImpl())
.addService(ServerInterceptors.intercept(MyServiceGrpc.bindService(new MyServiceImpl(context)), new MyServerInsterceptor(context)))
.build()
.start();
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext(true).build();
Channel channel = ClientInterceptors.intercept(managedChannel , new MyClientInterceptor());
Client client = new HelloWorldClient(channel);
备注:
该配置参照官方实例进行改写,如有问题请在下方评论区留言。完整代码请联系作者。