Ich versuche, Spring UriComponentsBuilder zu verwenden, um einige URLs für oauth Interaktion zu generieren. Die Abfrageparameter enthalten solche Entitäten wie Callback-URLs und Parameterwerte mit Leerzeichen in ihnen.URL-Codierung mit dem neuen Spring UriComponentsBuilder
Versuch UriComponentBuilder zu verwenden (da UriUtils jetzt veraltet)
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(oauthURL);
urlBuilder.queryParam("client_id", clientId);
urlBuilder.queryParam("redirect_uri", redirectURI);
urlBuilder.queryParam("scope", "test1 test2");
String url = urlBuilder.build(false).encode().toUriString();
Leider, während der Raum in dem Umfang Parameter erfolgreich mit '+' ersetzt wird, ist die redirect_uri Parameter bei allen URL nicht codiert.
Z. B,
redirect_uri=https://oauth2-login-demo.appspot.com/code
sollte
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode
gelandet war aber unberührt. Tauchen in den Code, insbesondere org.springframework.web.util.HierarchicalUriComponents.Type.QUERY_PARAM.isAllowed (c):
if ('=' == c || '+' == c || '&' == c) {
return false;
}
else {
return isPchar(c) || '/' == c || '?' == c;
}
eindeutig erlaubt ':' und '/' Zeichen, die durch Gummi, es shouldn‘ t. Es muss eine andere Art von Kodierung sein, aber für das Leben von mir kann ich mir nicht vorstellen was. Spreche ich hier die falschen Bäume?
Dank
Dies ist nicht korrekt, weil '&' und andere Zeichen mit Bedeutung ebenfalls nicht maskiert sind. UriComponentsBuilder codiert den Abfrageparameter nicht per URL. –
@Adam Millerchip, verstehe ich nicht - sicherlich & _ist_ immer entkommen.Das OP hat den Code-Snippet-Snippet eingefügt, der zeigt, dass & nicht erlaubt ist, und auch nicht = oder +. All dies würde entkommen. – simonh
Sie würden das denken, aber es tut es nicht. Probieren Sie es aus und sehen Sie. –