Adelante, la consulta del llamante, portes en lugar de codarlos dos veces

FixAPIService
Se descapó
7 de agosto de 2026 a las 4:07 UTC
Autor
Kamo
Compromit
3c24d32

Cada URL esta puerta de compilación se ensambla desde getRequestURI() y getQueryString (a los dos ya por ciento-codificado * y luego fue entregado a Resttecado como una cuerda. Las sobrecargas de la cadena de RestTemplate no toman una URL; ellos tomar una URI TEMPLATE, ampliada por un DefaultUriBuilderFactory que RestTemplate configura en EncodingMode.URI-COMPONENT. Ese modo codifica cada componente, y '%' no es un pchar, por lo que se escapó de nuevo un escape existente: %2C se quedó en %252C. El servicio aguas arriba decodificaba una vez y recibió el símbolo literal A%2CB uno valor donde el llamante envió dos. forward() es el único embudo para cada /api/ox-/** ruta, so /api/docs, /api/security, /api/kb, /api/media y el resto todos se vieron afectados de una vez; los valores sin carácter reservado son un punto fijo, que es lo que lo hizo intermitente y fácil de perder. toUpstreamUri () analiza la URL y la sobrecarga de intercambio URI() elude el Manecle de plantilla por completo, por lo que los bytes cruzan el lúbrete sin tocar. No es deliberadamente un intercambio directo a URI.create. Ese método THROWS en un carácter que es ilegal en una URI, un espacio crudo, 'A', 'o', una fuga truncada Y tal solicitud funciona HOY precisamente porque el segundo codificador lo repara. En IllegalArgumentException el ayudante devuelve nulo y el llamante entrega el String to RestTemplate exactamente como antes, con una WARN nombrando la URL para que el caso es visible en lugar de silencio. Corre la parada de tráfico se descarrillada; malformada El tráfico se comporta exactamente como lo hizo. Los cinco sitios de intercambio en esta clase. hacia adelante, hacia adelanteWebhook, forwardCallback y los dos webhook POST ayudantes a través de un intercambioUpstream por lo que las dos codificaciones no pueden derivar por sitio de llamada. Las pruebas afirman que el URI que realmente sale de RestTemplate, vía MockRestServiceServer en lugar de el valor de retorno del ayudante solo, ya que la codificación sucede dentro RestTemplado: status=PENDING%2CIN-PROGRESS llega con exactamente un nivel de codificación y no %25 en ninguna parte; la sobrecarga de la Cadena se fija como la cosa que doble codificado; un espacio crudo, un %2 truncado y un corsé de .id cada caída de vuelta en lugar de tirar; y una consulta ordinaria repetida-param no cambia de ninguna manera. mvn -o prueba: 29 pruebas, 0 fallos.

Todos los cambios

Como lo que ves enviaste?

Cada una de estas actualizaciones aterriza en su espacio de trabajo automáticamente. Empieza gratis y verlo crecer semana tras semana.

Arranzar gratis para siempreVer Precios