Próbuję użyć Spring's UriComponentsBuilder do generowania adresów URL dla interakcji oauth. Parametry zapytania zawierają takie elementy, jak adresy URL wywołania zwrotnego i wartości parametrów ze spacjami.Kodowanie adresu URL przy użyciu nowej wersji Spring UriComponentsBuilder
Próba użycia UriComponentBuilder (bo UriUtils jest teraz przestarzała)
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();
Niestety, podczas gdy przestrzeń w parametrze zakres jest z powodzeniem zastąpić „+”, parametr redirect_uri wcale nie jest zakodowany w adresie URL.
Np,
redirect_uri=https://oauth2-login-demo.appspot.com/code
powinien skończyło się
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode
ale był nietknięty. Nurkowanie na kod, w szczególności org.springframework.web.util.HierarchicalUriComponents.Type.QUERY_PARAM.isAllowed (C):
if ('=' == c || '+' == c || '&' == c) {
return false;
}
else {
return isPchar(c) || '/' == c || '?' == c;
}
wyraźnie pozwala ':' i postacie '/', który z gumy, to shouldn” t. Musi robić jakiś inny rodzaj kodowania, choć nie potrafię sobie wyobrazić co z mojego życia. Czy wyrzucam złe drzewa?
Dzięki
To nie jest poprawne, ponieważ '&' i inne znaki o znaczeniu również nie są chronione. UriComponentsBuilder nie koduje adresu URL parametru zapytania. –
@Adam Millerchip, nie rozumiem - z pewnością i tak się ucieknę.OP wkleił fragment kodu pokazujący, że & nie jest dozwolony, ani nie jest = lub +. Wszystkie te zostaną uciec. – simonh
Myślisz, że tak, ale tak nie jest. Spróbuj i zobacz. –