zhangqian
2024-03-25 63d76f26a0e8852a321218a2d38984e3951c0531
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package middleware
 
import (
    "context"
    "google.golang.org/grpc"
    "google.golang.org/grpc/metadata"
)
 
// HeaderInterceptor 拦截器函数
func HeaderInterceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
    token := ctx.Value("token")
    if token != nil {
        // 创建一个自定义的 metadata
        md := metadata.Pairs("token", token.(string))
        // 将 metadata 添加到 context 中
        ctx = metadata.NewOutgoingContext(ctx, md)
    }
    // 调用实际的 gRPC 方法
    err := invoker(ctx, method, req, reply, cc, opts...)
    return err
}