记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪

公司最近准备使用nacos作为注册中心,然后我去预研了一番,根据官网提供的一个样例做了一次权限登陆配置的demo(权限登陆样例)。发现客户端死活连接不上,总是403的错误,根据惯例来讲,这是没有授权引起的,然后我去github上找了下,果然有人提了这个issue
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第1张图片
好,问题有了,那么接下来追踪产生的原因。

官网的权限登陆样例中,加入了用户名和密码:
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第2张图片
然而我搜索了一番,发现我引入的包中,PropertyKeyConst中并没有USERNAME和PASSWORD,我开始怀疑是不是我引入的spring-cloud-alibaba版本低了,确认了一番,确实已经是最新版了(2.2.0.RELEASE)。那么继续查,这个PropertyKeyConst属于nacos-api的包中(我发现我用的是1.1.4),然而nacos server是用的1.2,会不会有更新的版本?

maven仓库上找了一手,发现确实有更新的1.2版本
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第3张图片
我就纳闷了,为什么cloud-starter里面引的包不是最新版。。。
除了替换nacos-api,另外还有个nacos-client也要替换成1.2。
配置连接用户和密码:
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第4张图片
本来按照常规操作来说,到这里已经可以宣告成功了,奈何nacos-client有bug。
最后通过debug会发现,ServerHttpAgent这个类中,有个方法
在这里插入图片描述
由于这里拼接了“/”,又nacos server端使用了spring security,在新版的spring security中,对url进行了规则强校验,不允许类似“http://127.0.0.1//xxx”这种"//“出现,导致出现获取配置出现500的错误。
凉了,只有改源码,但是不稳当,最后我的解决方案是:
1首先改bootstap.yml配置文件
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第5张图片
其中context-path必须改成 /nacos,通过源码追踪可以发现,如果不改,连接的时候会登陆不上。
2加入两个新的依赖
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第6张图片
这两个依赖在最新的alibaba cloud 中没有,需要手动加入,才能使用权限功能
3在访问nacos前加入一层nginx
记一次nacos 1.2增加登陆权限验证后,客户端连接报403的问题追踪_第7张图片
这样做的目的是为了重写”//“为”/",保证security的url校验能够成功,
其中 nacosserver是nacos的访问url,这里我配置了两个,第一个是访问nacos的管理界面,第二个是client注册nacos的url

你可能感兴趣的:(nacos)