dubbo icon indicating copy to clipboard operation
dubbo copied to clipboard

dubbo token 消费者无法获取并传递到服务提供者,其他主动添加的隐式参数也无法传递到服务提供者

Open zhouyu00 opened this issue 3 years ago • 7 comments

  • [ ] I have searched the issues of this repository and believe that this is not a duplicate.

Environment

  • Dubbo version: 3.1.0
  • Operating System version: windows10
  • Java version: 11

Steps to reproduce this issue

希望使用dubbo token 来鉴权

  1. 在服务提供者的实现注解上开启token
@DubboService(protocol = "rest", validation = "true", token = "true")
public class AdMaterialController implements AdMaterialControllerI_Test {
    @Autowired
    private AdMaterialQueryService adMaterialQueryService;
    @Override
    public AdResponse edit(AdMaterialEdit req) {
        AdResponse<AdMaterialDto> resp = adMaterialQueryService.edit(req);
        return resp;
    }

}

2.查看nacos,元数据中有token

Expected Behavior

Screenshot_121 remoteToken为Null

后续 主动主动向RpcContext上下文中添加隐式参数,跟踪发现走的是 org.apache.dubbo.rpc.proxy.AbstractProxyInvoker 调用时根本没有使用隐式参数

Object value = doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());

Actual Behavior

zhouyu00 avatar Nov 26 '22 07:11 zhouyu00

刚刚又看了,难道就是dubbo-rest 没有实现隐式参数的传递?

zhouyu00 avatar Nov 26 '22 08:11 zhouyu00

org.apache.dubbo.rpc.protocol.rest.RpcContextFilter 会传递参数,但是这块的设计可能有问题,没有从 invocation 去取参数

AlbumenJ avatar Nov 28 '22 01:11 AlbumenJ

我在修复这个问题 但是发现几个其他的问题 RpcContxt里的 内容好像和RpcInvocation 里的不是同一个对象 他们的修改互不影响 这个是正常的吗 @AlbumenJ

ShenFeng312 avatar Dec 09 '22 14:12 ShenFeng312

我在修复这个问题 但是发现几个其他的问题 RpcContxt里的 内容好像和RpcInvocation 里的不是同一个对象 他们的修改互不影响 这个是正常的吗 @AlbumenJ

框架侧的设计是推荐用户使用 RpcContext,框架内使用 invocation 传递。RpcContext 在最外侧的 Filter 会转换进 invocation。理论上数据是应该以 invocation 为准的

AlbumenJ avatar Dec 12 '22 07:12 AlbumenJ

现在 rest 的到获取隐式参数时已经没有invocation 了 需要重RpcContext上设置进去 没有进入的原因是他不像dubbo 一样设置token 参数 然后provider 端也没有读取头部的隐藏参数

ShenFeng312 avatar Dec 13 '22 03:12 ShenFeng312

现在 rest 的到获取隐式参数时已经没有invocation 了 需要重RpcContext上设置进去 没有进入的原因是他不像dubbo 一样设置token 参数 然后provider 端也没有读取头部的隐藏参数

rest protocol 的可以从 invocation 里面覆盖写入一次 RpcContext

AlbumenJ avatar Dec 13 '22 07:12 AlbumenJ

Fix in #11144

AlbumenJ avatar Dec 30 '22 08:12 AlbumenJ