Encaminhar os bytes de consulta do chamador em vez de os codificar duas vezes

FixAPIService
Navios
7 de agosto de 2026 às 04:07 UTC
Autor
Kamo
Enviar
3c24d32

Cada URL que este gateway constrói é montado a partir de getRequestURI() e getQueryString() — ambos já codificados por cento — e foi então entregue para RestTemplate as a String. As sobrecargas de String do RestTemplate não tomam um URL; eles tome um TEMPLATE URI, expandido por uma Fábrica DefaultUriBuilder configura em EncodingMode.URI COMPONENT. Esse modo codifica cada componente, e '%%' não é um pchar, por isso uma fuga existente foi novamente escapada:% 2C esquerda como% 252C. O serviço a montante descodificado uma vez e recebeu o token literal A% 2CB — um valor para onde o chamador enviou dois. forward() é o funil único para cada /api/<x>/** rota, assim /api/docs, /api/segurança, /api/kb, /api/media e o resto foram todos afetados ao mesmo tempo; valores sem caráter reservado são um ponto fixo, que foi o que o tornou intermitente e fácil de perder. toUpstreamUri() analisa o URL e a sobrecarga de URI de cambio() ignora o template handler inteiramente, então os bytes cruzam o lúpulo intocado. É deliberadamente NÃO uma troca direta para URI.create. Este método é caractere que é ilegal em um URI — um espaço bruto, '', '{}', uma fuga truncada — e tal pedido funciona hoje precisamente porque o segundo o codifica. No Argumento IlegalExcepção o ajudante retorna nulo e o chamador entrega o String to RestTemplate exatamente como antes, com um warn nomeando o URL para o caso é visível em vez de silencioso. O tráfego correto deixa de ser mutilado; mal formado O trânsito comporta-se exactamente como aconteceu. Todos os cinco sítios de intercâmbio desta classe — para frente, para frenteWebhook, para frenteCallback e os dois webhook POST helpers — vá através de uma trocaUpstream para que as duas codificações não possam derivar por local de chamada. Testes afirmam o URI que realmente deixa RestTemplate, via MockRestServiceServer em vez do valor de retorno do ajudante sozinho, uma vez que a codificação acontece dentro RestTemplate: status=PENDING% 2CIN PROGRESS chega com exatamente um nível de codificação e no% 25 em qualquer lugar; a sobrecarga de texto é fixada como a coisa que o código duplo; um espaço em bruto, um% 2 truncado e uma chave {id} para trás ao invés de lançar; e uma consulta comum de parametismo repetido é inalterada de qualquer forma. mvn -o teste: 29 testes, 0 falhas.

Todas as alterações

Como o que vês no transporte?

Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.

Começar Livre Para SempreVer Preços