- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试使用 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/
嘿,我有这个包含多个查询参数的网址 - 它用于搜索。这是一个仇恨链接 https://someurl/customers?customer-id={customer-id}&type={type}&s
我正在使用UriComponentsBuilder: UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("com.st
我在学习 spring boot 时得到了一个 UriComponentsBuilder 示例。不知道UriComponentsBuilder的含义和UriComponentsBuilder的作用。
我正在尝试构造一个 url UriComponentsBuilder。 UriComponentsBuilder.fromUriString(BASE) .pathSe
我遇到了一个问题,我想它必须很容易解决,但我坚持了下来。 这是我的代码片段: String url = UriComponentsBuilder.fromPath("http://localhost"
我很难理解 UriComponentsBuilder 的行为.我想用它对查询参数中的 URL 进行编码,但它似乎只转义 % 字符,而不转义其他必要的字符,例如 &。 查询参数中根本未编码的 URL 示
我有以下代码: String convertedBuilder = builder.toUriString(); convertedBuilder = convertedBuilder
我最近切换到 Spring 来使用 ServiceNow 托管的 REST API 调用。 我正在构建我的 URI,如下所示: UriComponentsBuilder builder = UriCo
我有一个如下所示的路径:/service/method/{id}/{parameters},我使用restTemplate调用它,其中/service/method是一个微服务,{id} 是我需要询问
在 UriComponentsBuilder 中使用 Expand() 和直接添加值有什么不同? //#1 String uri = UriComponentsBuilder.fromUriStrin
UriComponentsBuilder 的文档建议转换为 java.net.URI 是可能的,但并不直接。 以下似乎可行,但涉及通过 toUriString() 进行的中间序列化。 UriCompo
我正在尝试使用 spring 的 UriComponentsBuilder 为 oauth 交互生成一些 url。查询参数包括回调url和参数值等实体,其中包含空格。 尝试使用 UriComponen
为了将我的 Java SpringBoot 应用程序与常规 REST 端点集成,我使用此方法来准备 URI import org.springframework.web.util.UriCompone
我有一个方法,它接受一些参数并从中形成一个 URI,以便访问我们的客户端 REST 服务。这些参数之一可能出现空格。问题是 UriComponentsBuilder.pathSegment 忽略了空间
您好,如何使用“http://test.com/#/signup ”成功创建 UriComponentsBuilder?以下代码将抛出无效的 HTTP url。 UriComponentsBuilde
我是一名优秀的程序员,十分优秀!