一个gRpc拦截器的bug

WolveStorm · 2022-05-02 20:19:12 · 2895 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-05-02 20:19:12 的主题,其中的信息可能已经有所发展或是发生改变。

问题大概是这样的,有一个链式的grpc流式拦截器。如下图:

image.png 其中执行到GrpcJWTAuthToken这个拦截器的时候。会判断客户端传过来的metedata中的Authorization空格后面的token是否合法。 如果合法,就可以找到响应的用户,然后将用户的信息放到metedata里面. image.png 然后调用下面的handler方法,执行下一个拦截器。 image.png 然后就会走到流量统计拦截器,这个时候获取metedata的租户,却获取不到了。 image.png

下面上一下debug的图。 image.png

image.png

我自己试了一下,感觉是因为就算metedata进行了set,但是对执行器链的context没有改变,所以执行到下一个拦截器。 还是用的没set的context,但是不知道如果修改context。 image.png

可以得到context。 但是context是开头小写,我无法修改, image.png

我该怎么办? 求大佬解答。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2895 次点击  
加入收藏 微博
5 回复  |  直到 2022-05-18 15:00:32
colin321
colin321 · #1 · 3年之前

这个不是bug image.png FromIncomingContext返回的是个新对象,也就是说修改md无效,需要重新setHeader

WolveStorm
WolveStorm · #2 · 3年之前
colin321colin321 #1 回复

这个不是bug ![image.png](https://static.golangjob.cn/220506/c16f9494a32f60ad37dc7d5b2a2a9733.png) FromIncomingContext返回的是个新对象,也就是说修改md无效,需要重新setHeader

我setHeader也试过了,debug的时候还是不行啊,大哥能不能加个q详谈一下。

WolveStorm
WolveStorm · #3 · 3年之前
colin321colin321 #1 回复

这个不是bug ![image.png](https://static.golangjob.cn/220506/c16f9494a32f60ad37dc7d5b2a2a9733.png) FromIncomingContext返回的是个新对象,也就是说修改md无效,需要重新setHeader

image.png image.png

colin321
colin321 · #4 · 3年之前

grpc了解不深,之前随便猜测了下 我看了下源码,流拦截器之间没有接口可以传递数据,只能使用其他的方式,redis/beego的cache/或者自己实现

WolveStorm
WolveStorm · #5 · 3年之前

找到公司的大佬解决了,包装一下context即可。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传