Я пытаюсь использовать spring UriComponentsBuilder для генерации некоторых URL-адресов для oauth-взаимодействия. Параметры запроса включают такие объекты, как обратные URL-адреса и значения параметров с пробелами в них.
Попытка использования UriComponentBuilder (поскольку UriUtils теперь устарела)
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();
К сожалению, в то время как пространство в параметре области области применения успешно заменено на "+", параметр redirect_uri совсем не закодирован url.
Например,
redirect_uri=https://oauth2-login-demo.appspot.com/code
должно было закончиться
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode
но не затронута. Дайвинг в код, в частности org.springframework.web.util.HierarchicalUriComponents.Type.QUERY_PARAM.isAllowed(c):
if ('=' == c || '+' == c || '&' == c) {
return false;
}
else {
return isPchar(c) || '/' == c || '?' == c;
}
четко разрешает символы ':' и '/', которые по десне его не должны. Он должен делать какой-то другой тип кодирования, хотя для жизни меня я не могу представить, что. Я здесь лаяю неправильное дерево здесь?
Спасибо