Transférer les octets de requête de l'appelant au lieu de les coder deux fois

FixAPIService
Expédié
7 août 2026 à 04:07 UTC
Auteur
Kamo
Commite
3c24d32

Chaque URL cette passerelle construite est assemblée à partir de getRequestURI() et getQueryString() - les deux déjà encodés - et a ensuite été remis à Reste de modèle en tant que chaîne. Les surcharges de la chaîne de RestTemplate ne prennent pas d'URL; elles prendre un TEMPLATE D'URI, élargi par un DefaultUriBuilderFactory qui se repose configure dans EncodingMode.URI-COMPONENT. Ce mode encode chaque composant, et '%' n'est pas pchar, de sorte qu'une évasion existante s'est à nouveau échappée: %2C est resté en %252C. Le service en amont a décodé une fois et a reçu le jeton littéral A%2CB un valeur où l'appelant a envoyé deux. forward() est l'entonnoir unique pour chaque /api/ ' ' itinéraire, so /api/docs, /api/security, /api/kb, /api/media et le reste ont toutes été affectées en même temps; les valeurs sans caractère réservé sont un point fixe, qui l'a rendu intermittent et facile à manquer. toUpstreamUri() parse l'URL et la surcharge URI de l'échange() contourne le Processeur de gabarit entièrement, donc les octets traversent le houblon non touché. Il ne s'agit pas délibérément d'un échange direct avec URI.create. Cette méthode est soumise à un Caractère illégal dans un URI - un espace brut, '-', ', ', '', ', ', ', ', ', ', ', ', ', ', ', - et une telle demande fonctionne AUJOURD'HUI précisément parce que la seconde encode la répare. Sur IllegalArgumentException l'aide rend nuls et l'appelant porte le Chaîne à RestTemplate exactement comme avant, avec un ATTENTION nommant l'URL donc le cas est visible au lieu de se taire. Correct de circulation continue d'être mêlée; malformation Le trafic se comporte exactement comme il l'a fait. Les cinq sites d'échange dans cette catégorie forwardWebhook, forwardCallback et les deux assistants POST à base de webhook à travers un échangeUpstream afin que les deux codages ne puissent pas dériver par site d'appel. Des tests affirment que l'URI qui laisse en fait RestTemplate, via MockRestServiceServer plutôt que la valeur de retour de l'aide seule, puisque l'encodage se produit à l'intérieur RestTemplate: status-PENDING%2CIN-PROGRESS arrive avec exactement un niveau de codage et pas de %25 nulle part; la surcharge de cordes est épinglée comme la chose qui double-encodage; un espace brut, un tronconcé %2 et un raccord d'assèchement 'id' chacun de retour plutôt que de lancer; et une requête ordinaire à pare-réacteurs répétés est inchangée dans un sens ou dans l'autre. test mvn -o: 29 essais, 0 défaillance.

Tous les changements

Comme ce que tu vois expédier ?

Chacune de ces mises à jour atterrit automatiquement dans votre espace de travail. Commencez gratuitement et regardez-le grandir semaine après semaine.

Commencez gratuitement pour toujoursPrix de visualisation