#问题:在grpc中传递上下文信息,但是在下一个中间件里却获取不到
#情况如下:
做了删减,大概逻辑是这样的,通过md.Set方法插入值后,debug确实可以找到信息,但是在第15行handler(srv, ss)执行下一个中间件时
func GrpcJwtAuthTokenMiddleware(serviceDetail *dao.ServiceDetail) func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
md, ok := metadata.FromIncomingContext(ss.Context())
if !ok {
return errors.New("miss metadata from context")
}
appList := dao.AppManagerHandler.GetAppList()
for _, appInfo := range appList {
if appInfo.AppID == claims.Issuer {
md.Set("app", public.Obj2Json(appInfo))
break
}
}
if err := handler(srv, ss); err != nil {
log.Printf("GrpcJwtAuthTokenMiddleware failed with error %v\n", err)
return err
}
return nil
}
}
在这里metadata.FromIncomingContext()获取上下文信息后,使用md.Get("app")获取的值却为空,debug发现 md, ok := metadata.FromIncomingContext(ss.Context())此方法获取的map中并没有上个中间件set进的"app"信息,请问这种情况是否有有效的解决方法
func GrpcJwtFlowCountMiddleware(serviceDetail *dao.ServiceDetail) func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
md, ok := metadata.FromIncomingContext(ss.Context())
if !ok {
return errors.New("miss metadata from context")
}
appInfos := md.Get("app")
}
}