- Verschifft
- 7. August 2026 um 04:07 UTC
- Autor
- Kamo
- Ausschuss
- 3c24d32
Jede URL, die dieses Gateway erstellt, wird von getRequestURI() zusammengesetzt und getQueryString() - beide bereits prozentig kodiert und wurde dann an RestTemplate as a String. RestTemplate's String Überlastungen nehmen keine URL; sie nehmen Sie eine URI TEMPLATE, erweitert durch eine DefaultUriBuilderFactory, die RestTemplate konfiguriert im EncodingMode.URI_COMPONENT. Dieser Modus kodiert jede Komponente und '%' ist kein pchar, so dass eine bestehende Flucht wieder entwichen wurde: %2C links als %252C. Der vorgeschaltete Dienst einmal entschlüsselt und erhielt das buchstäbliche Token A%2CB - eins Wert, bei dem der Anrufer zwei gesendet hat. vorwärts() ist der einzelne Trichter für jeden /api/<x"/** Route, also /api/docs, /api/security, /api/kb, /api/media und der Rest wurden alle auf einmal betroffen; Werte ohne reservierten Charakter sind ein fester Punkt, das ist, was es unregelmäßig und leicht zu übersehen. toUpstreamUri() parsiert die URL und die URI-Überlastung des Austausches() umgeht die Template Handler ganz, so dass die Bytes überqueren den Hop unberührt. Es ist absichtlich KEIN direkter Tausch nach URI.create. Diese Methode THROWS auf einem Zeichen, das in einer URI illegal ist - ein Rohraum, '|', '{', eine verkürzte Flucht Eine solche Anfrage funktioniert HEUTE, weil die zweite kodiert sie repariert. Auf IllegalArgumentException gibt der Helfer null zurück und der Anrufer übergibt die String to RestTemplate genau wie zuvor, mit einer WARN-Nennen-Nenung der URL, so dass der Fall ist sichtbar statt still. Korrekter Verkehr stoppt Verstümmelung; missgebildet Der Verkehr verhält sich genauso wie. Alle fünf Austausch-Websites in dieser Klasse Forward, forwardWebhook, forwardCallback und die beiden webhook POST Helfer über einen ExchangeUpstream, so dass die beiden Codierungen nicht pro Anrufseite driften können. Tests behaupten, dass die URI, die tatsächlich verlässt RestTemplate, über MockRestServiceServer anstatt des Rückgabewertes des Helfers allein, da die Kodierung im Inneren stattfindet Resttemplat: status=PENDING%2CIN_PROGRESS kommt mit genau einer Ebene von Codierung und keine %25 irgendwo; die String-Überlastung wird als das Ding gepinnt, das doppelt codiert; ein roher Raum, ein abgeschnittener %2 und eine {id] Klammer jeden Fall zurück anstatt zu werfen; und eine gewöhnliche wiederholte-param Abfrage ist so oder so unverändert. mvn -o Test: 29 Tests, 0 Ausfälle.