GRPC支持拦截器特性,提高了GRPC的灵活性和扩展性。
GRPC
使用grpcx.Server.ChainUnary增加额外的服务端拦截器:
grpcx.Server.ChainUnary
c := grpcx.Server.NewConfig() c.Options = append(c.Options, []grpc.ServerOption{ grpcx.Server.ChainUnary( grpcx.Server.UnaryValidate, )}..., ) s := grpcx.Server.New(c) user.Register(s) s.Run()
使用grpcx.Client.ChainUnary增加额外的服务端拦截器:
grpcx.Client.ChainUnary
conn = grpcx.Client.MustNewGrpcClientConn("demo", grpcx.Client.ChainUnary( grpcx.Client.UnaryTracing, ))
框架的grpcx组件提供了一系列的常用拦截器,部分内置,部分可选择插拔使用。
grpcx
UnaryError
UnaryTracing
StreamTracing
UnaryRecover
panic
UnaryAllowNilRes
nil
Res
UnaryValidate
能支持鉴权吗?
用户鉴权还是ip白名单? 如果是用户这应该是网关处理的.
在对外提供rpc服务的场景下的用户鉴权,比如一些app通过grpc来和服务进行交互
可以继续在Options继续追写ServerOption(就跟http的middleware一样).使用metadata传递令牌,在Interceptor用ctx取回令牌做校验.参照gRPC 鉴权方案
谢谢, 已实现。用的grpc自身的方法,框架本身没看到有这个封装
5 Comments
shiqinfeng
能支持鉴权吗?
糖水不加糖
用户鉴权还是ip白名单? 如果是用户这应该是网关处理的.
shiqinfeng
在对外提供rpc服务的场景下的用户鉴权,比如一些app通过grpc来和服务进行交互
糖水不加糖
可以继续在Options继续追写ServerOption(就跟http的middleware一样).使用metadata传递令牌,在Interceptor用ctx取回令牌做校验.参照gRPC 鉴权方案
shiqinfeng
谢谢, 已实现。用的grpc自身的方法,框架本身没看到有这个封装