Feign调用接口时,AuthUtil中获取不到用户

Blade 未结 3 742
420714167
420714167 剑圣 2023-02-02 10:25

一、该问题的重现步骤是什么?

1. 请求Controller 方法

2. 在Controller请求Feign接口,在feign接口实现中通过AuthUtil获取用户信息

3.


二、你期待的结果是什么?实际看到的又是什么?

    在conrotler 调用feign接口时能够在feign中通过AuthUtil获取到用户信息


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

Blade cloud 3.0.1 windows


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

根据问题https://sns.bladex.cn/q-8019.html ,跟踪发现第一步controler中调用时设置的了header,在controler调用feign时

BladeServletRequestListener又进行了拦截此时从 this.httpHeadersGetter.get(request)获取到的header为空。导致
ThreadLocalUtil.put("bladeContext", httpHeaders);设置值为空了。

3条回答
  • 2023-02-02 10:32
    BladeServletRequestListener

    拦截了controller 设置了header ,但是调用feign的时候又拦截了 ,此时request中没有header,设置为空了。

    0 讨论(0)
  • 只支持配置的 header才能加入headers。

    HJMX3)W]Z~WG0[WW$G$EA`6.png

    0 讨论(0)
  • 2023-05-09 13:25

    feign调用接口,推荐思路与RPC一致,将用户id通过feign传递,feign实现类获取id再调用方法得到User类。

    feign调用往往会有多层级的情况,带有长段的token请求头会降低并发性能,又因为feign为内部调用,所以直接传递userId是完全没问题的。


    0 讨论(0)
提交回复