nacosパスワードが変更されたため、seataの起動に失敗しました(ソースコード分析)

創造を続け、成長を加速させましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して3日目です。クリックしてイベントの詳細をご覧ください。


私は今日起きて实施人员、致命的な電話を受けました:咋回事呢?表单数据咋保存不了了呢?= _ =

いいやつ、これを聞いた後、私は盲目で、本当にハゲで、朝に死ぬように呼びました!

image.png

バディは何もしていないようだと思いました。状況はどうですか!

image.png

待って、考えてみると、nacos未授权访问的漏洞昨日修理されたようですが、これが原因でしょうか?

それからすぐに会社に戻ってサーバーをチェックしましたが、いい人は本当にこれで、seataは電話を切ります。分散トランザクションが失敗し、フォームの保存に失敗します。

これは確かに仲間の問題です、この問題に気づいていませんでした!

賃金から差し引かれませんか?

image.png

さて、今日それについて話しましょう、nacosは認証を有効にし、パスワードを変更します。Seata分散トランザクション、障害問題の開始、話し合い、調査!

認証失敗の問題が報告され403、解決されました!

1.重要な注意事項

問題が発生するバージョンseata1.4.2次。

2.nacosのバグ修正

nacosの不正アクセスの脆弱性は以前に修正され、nacos認証アクセスが有効になり、パスワードが変更されました。

vi nacos / conf / application.properties

#开启认证配置
nacos.core.auth.enabled=true
复制代码

image-20220526115547418.png

パスワードを次のように変更します。nacos123!@

3.シータスタート

構成ファイルのパスワードが変更されましnacos123!@たが、seataをアクティブ化できません!

image-20220526120034644.png

image-20220526123106028.png

Seataは、構成センターおよび登録センターとしてnacosを統合しています。統合方法については、ここでは詳しく説明しません。ここを参照してください

image-20220526123243400.png

すると、インターネットで答えを見つけたところ、パスワードに特殊文字が入っていてエスケープされているそうです!

image-20220526123406145.png

それでは、nacosパスワードを変更し、に変更しnacos123、特殊記号を削除して、テストしてみましょう。

image-20220526123553039.png

image-20220526123640605.png

いいやつ、スタートアップは成功した、これは本当に問題だ!

image-20220526123748880.png

4.原因分析

看到这里,咱们不禁得想一下,究竟是哪里对密码进行了转义呢?

有好奇心的同学,咱们继续往下看,从源码中分析一下,找到转义的代码。

开干!!!

seata源码构建。可以参考这里:点击查看,这里就不再一 一讲解了!!!

现在,咱们一步步进行debug调试:

  • 直接启动server.java

image-20220526124806092.png

image-20220526125034041.png

启动报错了,NacosConfiguration出错了。那我们进入到NacosConfiguration类去看一下报错的地方。

这个错是NacosConfiguration输出的,我们可以通过输出的日志定位到具体的位置,但是这里没有,所以我们将断点,打到所有的logger上面来。

image-20220526125535650.png

可以看到是NacosConfiguration.getLatestConfig方法打印的错误日志信息。

说明是configService.getConfig方法抛弃异常了,那我们进入configService.getConfig方法查看。

image-20220526134846878.png

以上就是一步步调试,进入的方法图了,最终是NacosRestTemplate的execute方法,执行http请求,与nacos进行交互

那我们在execute方法,打个断点。

image-20220526135427339.png

很明显,已经快要找到原因了,已经看到password,确实是被转义了。

接下来,对方法调用栈一步步往上找,即可。

image-20220526135911713.png

很明显可以看到,就是这里的问题了:SecurityProxy类,login方法,URLEncoder.encode(password, "utf-8")

注意:nacos-client的版本是1.3.3

原因找到了!!!

image-20220526140234635.png

好的,看到这里,基本上,咱们就已经知道password被转义具体的原因了,也能知道是在哪里被转义了。

看到这里,咱们就有点奇怪了,seata版本是1.4.1,为啥用1.3.3版本的nacos-client呢?

难道这里,会有什么猫腻?

带着这个问题,我们看一下1.4.1版本的nacos-clientSecurityProxy类。

image-20220526140550882.png

ここを参照してください。nacos-clientの1.4.1バージョンはパスワードをエンコードしなくなりました。

よかったね!

image-20220526140951031.png

それで、これは公式のバグなのだろうかと思いました。Seata1.4.1バージョンのソースコード、なぜそれを構築するためにnacos-clientの1.3.3バージョンを使用するのですか?

image-20220526141637750.png

それは確かにバージョン1.3.3のnacos-clientです

それでもあきらめないで、それから1.4.2バージョンのseataを見てください?pomの依存関係

image-20220526141842305.png

Seataの1.4.2バージョンは、nacos-clientの1.3.3バージョンでもあります。

公式、本当にあなたがいます!

image-20220526142320615.png

最終的解決:

1.少なくとも1.4.2より後のseataバージョンをアップグレードします。(1.5.1バージョンでこのバグが修正されたかどうかはわかりません。テストする運命にある人に渡します!)

2.特殊文字なしでnacosパスワードを変更します。

3.バージョン1.4.1のseataソースコードの場合、nacos-clientバージョンを1.4.1に変更し、seataサービスを再構築します。(どんな穴があるかわかりません、それをテストする運命にある誰かにそれを与えます!)

結局、私はここにいます、私はもう投げたくありません、速く、2番目の方法を選んでください!

ふりが完了しました!

image-20220526142708885.png

さて、nacosパスワードの変更により、seataの起動に失敗しました(ソースコード分析)ので、ここにあります!

私は今日最初にここにいます、スキミング、スキミング!^ _ ^

あなたがそれが役に立つと思うならば、助けてください点个赞

image.png

おすすめ

転載: juejin.im/post/7102413947596177416
おすすめ