低调的骏马 2022-09-08 11:15 采纳率: 50%
浏览 11
已结题

在grpc中传递上下文信息,但是在下一个中间件里却获取不到

#问题:在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")    
    }
}
  • 写回答

1条回答 默认 最新

  • 低调的骏马 2022-09-08 11:59
    关注

    问题初步解决了,我降低版本从google.golang.org/grpc v1.49.0 // indirect降低到google.golang.org/grpc v1.36.1,现在取得app信息了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 修改了问题 9月8日
  • 创建了问题 9月8日

悬赏问题

  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答