问题大概是这样的,有一个链式的grpc流式拦截器。如下图:
![image.png](https://static.golangjob.cn/220502/e1c635d1bcbbac007709fb35bcff341e.png)
其中执行到GrpcJWTAuthToken这个拦截器的时候。会判断客户端传过来的metedata中的Authorization空格后面的token是否合法。
如果合法,就可以找到响应的用户,然后将用户的信息放到metedata里面.
![image.png](https://static.golangjob.cn/220502/54bd871232897c429cbc70c6914e4e5d.png)
然后调用下面的handler方法,执行下一个拦截器。
![image.png](https://static.golangjob.cn/220502/b95aed0e8e3ba25f377e7439c00d023e.png)
然后就会走到流量统计拦截器,这个时候获取metedata的租户,却获取不到了。
![image.png](https://static.golangjob.cn/220502/0ca6f9752acfd2c3f6aa7490d04bc1d7.png)
下面上一下debug的图。
![image.png](https://static.golangjob.cn/220502/1e99c802ce73d316799a4d96aabe0650.png)
![image.png](https://static.golangjob.cn/220502/f24015aae3a9002e16e9bf5c22a9bcd5.png)
我自己试了一下,感觉是因为就算metedata进行了set,但是对执行器链的context没有改变,所以执行到下一个拦截器。
还是用的没set的context,但是不知道如果修改context。
![image.png](https://static.golangjob.cn/220502/24851f5e3dbecbf681a2b813a9c792e1.png)
可以得到context。
但是context是开头小写,我无法修改,
![image.png](https://static.golangjob.cn/220502/aec4b01445c2b95621c304021b97dda7.png)
我该怎么办? 求大佬解答。
grpc了解不深,之前随便猜测了下
我看了下源码,流拦截器之间没有接口可以传递数据,只能使用其他的方式,redis/beego的cache/或者自己实现
#4
更多评论
这个不是bug
![image.png](https://static.golangjob.cn/220506/c16f9494a32f60ad37dc7d5b2a2a9733.png)
FromIncomingContext返回的是个新对象,也就是说修改md无效,需要重新setHeader
#1