gpt4 book ai didi

spring - 使用新的 Spring UriComponentsBuilder 进行 URL 编码

转载 作者:IT老高 更新时间:2023-10-28 13:48:05 30 4
gpt4 key购买 nike

我正在尝试使用 spring 的 UriComponentsBuilder 为 oauth 交互生成一些 url。查询参数包括回调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();

不幸的是,虽然 scope 参数中的空格被成功替换为 '+',但 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;
}

显然允许使用 ':' 和 '/' 字符,而口香糖不应该这样做。它一定是在做一些其他类型的编码,虽然对于我的生活,我无法想象是什么。我在这里叫错树了吗?

谢谢

最佳答案

UriComponentsBuilder 正在根据 RFC 3986 对您的 URI 进行编码,特别值得注意的是第 3.4 节关于 URI 的“查询”组件。

在“查询”组件中,字符“/”和“:”是允许的,不需要转义。

以 '/' 字符为例:'query' 组件(由未转义的 '?' 和(可选)'#' 字符明确分隔)不是分层的,'/' 字符没有特殊意义。所以不需要编码。

关于spring - 使用新的 Spring UriComponentsBuilder 进行 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com