Dubbo-2.7.3 - Nacos-2.0.3 整合遇到的unknown user问题及解决过程记录
解决方案
-
通过dubbo spi 实现一个自己的RegistryFatory (直接copy NacosRegistryFactory)
-
setProperties()方法中增加username和password的键值对
-
并且在META-INF/dubbo下添加对应接口的源根全限定名
-
因为我们的实现key为auth-nacos 跟nacos进行隔离 修改application.yml文件对应的registry链接地址为auth-nacos:// 开头
-
至此,启动成功,下面是详细定位过程
问题重现 (低版本的异常信息会是请求403并且会有h5元素提示unknown user!)
Caused by: com.alibaba.nacos.api.exception.NacosException: unknown user!
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:282) ~[nacos-client-2.0.4.jar:na]
... 36 common frames omitted
我们看到异常抛出后 NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:282)
在282行,requestToServer抛出的,我们进行debug
也就说明在进行服务导出时没有权限进行、所以要看request请求头当中是否存在token
我们继续反向推理出为什么没有token 也就是在SecurityProxy一开始构造时初始化构造NamingService的时候properties的问题
继续往上推,在构造properties的时候压根没有username和password的kv
至此可以定位出是NacosRegistryFactory在nacos配置auth需要认证时的缺陷