- Dikirim
- 7 Agustus 2026 pukul 04.07 UTC
- Penulis
- Kamo
- Commit
- 3c24d32
Setiap URL gerbang ini dibangun dari getRequestURI () dan getQueryString () - keduanya sudah persentase -encoded - dan kemudian diserahkan ke RestTemplate sebagai String. String RestTemplate overloads tidak mengambil URL; mereka take a URI TEMPLATE, expanded by a DefaultUriBuilderFactory that RestTemplate konfigurasi dalam EncodingMode.URI _ COMPONENT. Mode tersebut mengkode setiap komponen, dan '%' bukan sebuah pchar, jadi sebuah escape yang ada telah melarikan diri lagi:% 2C pergi sebagai% 252C. Layanan upstream pernah diterjemahkan dan menerima token literal A% 2CB - satu nilai di mana penelepon mengirim dua. Maju () adalah satu corong untuk setiap corong / api / < x > / * * route, so / api / docs, / api / secure, / api / kb, / api / media dan sisanya semua terpengaruh sekaligus; nilai dengan tidak ada karakter reserved adalah titik tetap, yang membuatnya terasing dan mudah untuk dilewatkan. untuk UpstreamUri () parses URL dan URI overload dari exchange () melewati penangan template sepenuhnya, sehingga byte lintas hop tersentuh. Hal ini sengaja NOT swap langsung ke URI.createe. Metode itu menghancurkan karakter yang tidak legal dalam URI - sebuah ruang mentah, '£124;', '{}', sebuah escape dipotong - dan permintaan tersebut bekerja hari ini justru karena encode kedua memperbaikinya. Pada IllegalArgumen Exception pembantu kembali null dan penelepon tangan yang String ke RestTemplate persis seperti sebelumnya, dengan sebuah WARN penamaan URL sehingga kasus terlihat bukan diam. Lalu lintas benar berhenti menjadi hancur; salah bentuk lalu lintas berperilaku persis seperti itu. Semua lima tempat pertukaran di kelas ini - maju, forwardWebhook, forwardCallback dan dua webhook POST pembantu - pergi melalui satu exchanggeUpstream sehingga dua encodings tidak dapat drift setiap situs panggilan. Tes menegaskan URI yang meninggalkan RestTemplate, melalui MockRestRestServiceServer bukan nilai kembali pembantu saja, karena pengkodean terjadi di dalam RestTemplate: status = PENDING% 2CIN _ PROGRESS tiba dengan tepat satu tingkat encoding dan tidak% 25 dimanapun; String overload disematkan sebagai hal yang ganda-dikodekan itu; sebuah ruang mentah, sebuah dipotong% 2 dan sebuah {id} kurung setiap mundur bukan membuang, dan biasa berulang-permintaan param adalah cara baik. mvn -o tes: 29 tes, 0 kegagalan.