nacos 返回 403 unknown user 太他么坑了 源码解析

大家好,我是烤鸭:

    nacos 真的是有点意思,有时候哪怕某个jar包版本冲突了都可能导致莫名其妙的错误,源码走一波吧。

当前版本

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR12</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.1.RELEASE</version></dependency>
</dependencies>

报错日志

com.alibaba.nacos.api.exception.NacosException: <html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Sat May 14 06:51:53 CST 2022</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>at com.alibaba.nacos.client.config.impl.ClientWorker.getServerConfig(ClientWorker.java:262)at com.alibaba.nacos.client.config.NacosConfigService.getConfigInner(NacosConfigService.java:143)at com.alibaba.nacos.client.config.NacosConfigService.getConfig(NacosConfigService.java:92)at com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder.loadNacosData(NacosPropertySourceBuilder.java:85)at com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder.build(NacosPropertySourceBuilder.java:74)at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadNacosPropertySource(NacosPropertySourceLocator.java:204)at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadNacosDataIfPresent(NacosPropertySourceLocator.java:191)at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadNacosConfiguration(NacosPropertySourceLocator.java:161)at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadExtConfiguration(NacosPropertySourceLocator.java:129)at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.locate(NacosPropertySourceLocator.java:102)at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:52)at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:47)at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:101)at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:623)at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:367)at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)at com.xxx.xxx.task.XxxTaskApplication.main(XxxTaskApplication.java:11)

问题猜想

nacos-client 1.2.0 以下的官方bug

https://blog.csdn.net/qq_35337554/article/details/104914397

这种问题大概率是版本问题,springboot/cloud/alibaba-cloud 参考版本。
https://blog.csdn.net/qq_38637558/article/details/114448690

client版本和server版本也要对的上,要注意下,不能盲目升client的版本,client和server 参考版本。

https://www.jianshu.com/p/df88e1967036

看看源码

如果上面的博客都看过了,还没解决问题,可能跟我的问题相似。

我们看下报错地方的源码, 为什么会报错。

ClientWorker 中 getServerConfig方法的 agent.httpGet 返回 403

public String[] getServerConfig(String dataId, String group, String tenant, long readTimeout)throws NacosException {String[] ct = new String[2];if (StringUtils.isBlank(group)) {group = Constants.DEFAULT_GROUP;}HttpResult result = null;try {List<String> params = null;if (StringUtils.isBlank(tenant)) {params = new ArrayList<String>(Arrays.asList("dataId", dataId, "group", group));} else {params = new ArrayList<String>(Arrays.asList("dataId", dataId, "group", group, "tenant", tenant));}result = agent.httpGet(Constants.CONFIG_CONTROLLER_PATH, null, params, agent.getEncode(), readTimeout);} catch (IOException e) {// 忽略无关代码}switch (result.code) {// 忽略无关代码case HttpURLConnection.HTTP_FORBIDDEN: {LOGGER.error("[{}] [sub-server-error] no right, dataId={}, group={}, tenant={}", agent.getName(), dataId,group, tenant);throw new NacosException(result.code, result.content);}default: {// 忽略无关代码}}
}

发现agent中的请求accessToken是null

在这里插入图片描述

accessToken 是项目启动后登录nacos返回的

这个就是 nacos-1.2.1 的源码,记住下面这个没有打印日志的异常。

SecurityProxy

public boolean login(List<String> servers) {try {if ((System.currentTimeMillis() - lastRefreshTime) < TimeUnit.SECONDS.toMillis(tokenTtl - tokenRefreshWindow)) {return true;}for (String server : servers) {if (login(server)) {lastRefreshTime = System.currentTimeMillis();return true;}}} catch (Throwable ignore) {}return false;
}

进 login 方法里看,我擦,报红了。

在这里插入图片描述

问题解决

Charsets 来自

import org.apache.commons.codec.Charsets;

pom

<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.4</version>
</dependency>

问题找到了, 我们项目用的 commons-codec 版本是1.4 ,已经没有这个类了,降到 1.13 没问题了

总结

一个简单的问题搞这么复杂,翻了n多博客,都没找到原因。

编译没报错,启动时候报错日志也没有,到请求nacos的时候,变成403了,这尼玛怎么找。

阿里开源的果然很坑,不过 2.0 据说优化了很多内容,性能也有很大提升。

伟大的开源都少不了大家的踩坑和pr,希望国产开源也越来越好吧,而不是为了什么OKR。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] Vue.observable你有了解过吗?说说看

[vue] Vue.observable你有了解过吗&#xff1f;说说看 让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。返回的对象可以直接用于渲染函数和计算属性内&#xff0c;并且会在发生改变时触发相应的更新&#xff1b;也可以作为最小化的跨组件状态存储器。个人简介 …

[vue] 你知道style加scoped属性的用途和原理吗?

[vue] 你知道style加scoped属性的用途和原理吗&#xff1f; 在标签上绑定了自定义属性&#xff0c;防止css全局污染 但是很多时候使用ui框架如果加scope就不能覆盖&#xff0c;这个时候一般写sass 会在最外层包裹该组件名的id 就可以不使用scoped 了个人简介 我是歌谣&#x…

研发效能提升 maven依赖扫描 版本统一 漏洞版本提醒

大家好&#xff0c;我是烤鸭&#xff1a; 整点干货&#xff0c;代码级别的版本统一&#xff0c;以及漏洞版本的扫描。 背景 两个方面吧。 项目整体的架构不统一&#xff0c;springboot/cloud 配置/注册中心也用的不统一&#xff0c;版本更是五花八门&#xff0c;怎么快速的找…

[vue] 你期待vue3.0有什么功能或者改进的地方?

[vue] 你期待vue3.0有什么功能或者改进的地方&#xff1f; 用尤大的话说就是各种速度提升n倍。我希望在依赖node_modules能够做出调整&#xff0c;文件数目太多&#xff0c;开启项目每次都要下载个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&…

Spring boot actuator端点启用和暴露

1.启用端点 默认情况下&#xff0c;除了shutdown端点是关闭的&#xff0c;其它的都是启用的。配置一个端点的启用&#xff0c;使用management.endpoint..enabled属性&#xff0c;下面的例子是启用shutdown端点&#xff1a; management.endpoint.shutdown.enabledtrue如果你个人…

java执行sql慢 navicat不慢 见鬼了

大家好&#xff0c;我是烤鸭&#xff1a; 有点意思的问题&#xff0c;代码提示接口超时(10s)&#xff0c;接口逻辑很简单&#xff0c;就一个sql查询。本来也想是sql慢&#xff0c;可是拿sql去Navicat执行下&#xff0c;一点不慢(50ms)。 环境 DB&#xff1a;SqlServer 连接池…

[vue] vue边界情况有哪些?

[vue] vue边界情况有哪些&#xff1f; 访问根实例、访问父组件、子组件个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

函数的基础

函数的初识&#xff1a; 封装一个功能。 def 函数名(): 函数体 函数的返回值&#xff1a;return 1,结束函数。 2&#xff0c;返回给执行者&#xff08;函数名()&#xff09;值。 return ----> None return 单个值----> 单个值 return 多个值----> &#xff08;多…

windows docker mongodb

大家好&#xff0c;我是烤鸭&#xff1a; 今天翻博客&#xff0c;发现4年前的一篇草稿&#xff0c;抽空给完善下。原本草稿写的是linux下mongo使用&#xff0c;还有java的一些api&#xff0c;现在就用容器实现下。 容器部署 官方网站&#xff1a; https://www.mongodb.com/ w…

[vue] 如何在子组件中访问父组件的实例?

[vue] 如何在子组件中访问父组件的实例&#xff1f; this.$parent拿到父组件实例 this.$children拿到子组件实例&#xff08;数组&#xff09;个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录…

[vue] watch的属性用箭头函数定义结果会怎么样?

[vue] watch的属性用箭头函数定义结果会怎么样&#xff1f; 因为箭头函数默绑定父级作用域的上下文&#xff0c;所以不会绑定vue实例&#xff0c;所以 this 是undefind个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢…

tensorflow的keras 与 原生keras几点比较

tensorflow的keras 与 原声keras几点比较&#xff0c;不是全面的比较&#xff0c;因为只是就使用时候发现的差异&#xff01; 使用函数式API时&#xff1a; 1. 定义模型模型时&#xff0c;用到输入的张量&#xff0c;也就是给Input的tensor赋值为你的inputs&#xff0c;在编译时…

[vue] 在vue项目中如何配置favicon?

[vue] 在vue项目中如何配置favicon&#xff1f; 也可以在当前项目部署的端口主目录下存放favicon.ico文件&#xff0c;默认就会显示该图标个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与…

Is the byte array a result of corresponding serialization for DefaultDeserializer

大家好&#xff0c;我是烤鸭&#xff1a; 问题记录&#xff0c;上线之后懵逼的问题。只能回滚?每次都是上线来暴击&#xff0c;不然多查查文章也不至于这么被动。 报错日志 org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nes…

[vue] 你有使用过babel-polyfill模块吗?主要是用来做什么的?

[vue] 你有使用过babel-polyfill模块吗&#xff1f;主要是用来做什么的&#xff1f; Babel默认只转换新的JavaScript句法&#xff08;syntax&#xff09;&#xff0c;而不转换新的API&#xff0c;比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对…

高级PHP工程师所应该具备的专业素养

高级PHP工程师所应该具备的专业素养 初次接触PHP&#xff0c;就为他的美所折服&#xff0c;于是一发不可收拾。 很多面试&#xff0c;很多人员能力要求都有“PHP高级工程师的字眼”&#xff0c;如果您真心喜欢PHP&#xff0c;并且您刚起步&#xff0c;那么我简单说说一个PHP高级…

容器环境 springcloud gateway grafana prometheus采集集成与问题

容器环境 springcloud gateway grafana prometheus采集集成与问题 大家好&#xff0c;我是烤鸭&#xff1a; 记录下网关上容器后&#xff0c;监控升级的过程。 原来的方式 grafana 和 prometheus 网上教程很多&#xff0c;就不细写了。 没上容器之前&#xff0c;可以在…

elasticsearch 问题

elasticsearch 的端口默认绑定到 127.0.0.1 上&#xff0c;对外开放 http 端口就配置 http.host&#xff0c;对外开放 tcp 端口就配置 network.host [1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]编辑 /etc/security…

[vue] 说说你对vue的错误处理的了解?

[vue] 说说你对vue的错误处理的了解&#xff1f; 分为errorCaptured与errorHandler。 errorCaptured是组件内部钩子&#xff0c;可捕捉本组件与子孙组件抛出的错误&#xff0c;接收error、vm、info三个参数&#xff0c;return false后可以阻止错误继续向上抛出。 errorHandler…

easyui Combotree 怎么加载数据 支持多选

1、开发环境vs2012 mvc4 c# 2、HTML前端代码 <% Page Language"C#" AutoEventWireup"true" CodeBehind"DataGridTest.aspx.cs" Inherits"MvcAppTest.DataGridTest" %><!DOCTYPE html><html xmlns"http://www.w3.…