【问题标题】:GRPC : How to pass value from interceptor to service functionGRPC:如何将值从拦截器传递到服务函数
【发布时间】:2022-12-03 16:28:47
【问题描述】:

我有一个验证 jwt 令牌并解析 id 和角色的一元拦截器。现在我需要将这些传递给服务功能。

拦截器

func Unary() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
    log.Printf("--> unary interceptor: %s ", info.FullMethod)

    if info.FullMethod == "/AntmanServer.AntmanUserRoutes/LoginUser" {
        return handler(ctx, req)
    }

    userId, _, err := authorize(ctx)
    if err != nil {
        return fmt.Sprintf("Error : %s", err), err
    }

    //newCtx := metadata.AppendToOutgoingContext(ctx,"id-key", string(userId), "role-key", roles)

    //header := metadata.Pairs("id-key", string(userId), "role-key", roles)
    //grpc.SendHeader(ctx, header)
    newCtx := context.WithValue(ctx, "id-key", string(userId))
    return handler(newCtx, req)
}

}

我试过了

newCtx := metadata.AppendToOutgoingContext(ctx,"id-key", string(userId), "role-key", roles)

还有这个

newCtx := context.WithValue(ctx, "id-key", string(userId))

但没有一个工作,如何做到这一点。提前致谢。

【问题讨论】:

  • 你所做的原则上是正确的。请澄清什么是“没有作品" 表示并显示您用来获取服务功能值的代码

标签: go metadata grpc


【解决方案1】:

ok,问题解决了,感谢cmets的各位。我正在为将来来到这里的人们发布此解决方案。

    //interceptor
    md, ok := metadata.FromIncomingContext(ctx)
    if ok {
        md.Append("id-key", string(id))
        md.Append("role-key", role)
    }
    newCtx := metadata.NewIncomingContext(ctx, md)
    return handler(newCtx, req)


   //Rpc function
   md, ok := metadata.FromIncomingContext(ctx)
   Userid := md["id-key"]
   role := md["role-key"]

【讨论】:

  • 谢谢,在 grpc 一元拦截器中遇到了同样的问题。这不是很明显。
【解决方案2】:

写在客户端:

md := metadata.Pairs("key", "value")
ctx := metadata.NewOutgoingContext(context.Background(), md)

并在服务器中读取:

md, ok := metadata.FromIncomingContext(ctx)
value := md["key"]

【讨论】:

  • 这是部分正确的,因为我的问题是关于拦截器和服务功能之间的通信。
猜你喜欢
  • 2017-12-09
  • 2016-04-26
  • 2019-12-13
  • 2019-07-18
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
相关资源
最近更新 更多