【发布时间】:2017-11-20 06:08:45
【问题描述】:
我正在执行一个 SAML 请求,该请求具有一个名为“SAMLRequest”的 base64 编码参数。问题是“+”字符没有得到 URL 编码(它适用于其他字符,例如“=”)。当服务器收到请求时,它被视为无效文档,因为所有“+”字符现在都是空格“”字符。
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_XML);
String base64SamlRequest = Base64.encode(... some payload ...);
HttpEntity<Object> httpEntity = new HttpEntity<>(base64SamlRequest, headers);
restTemplate.exchange(endpoint+"&SAMLRequest="+base64SamlRequest, method, httpEntity, String.class);
我也尝试过使用 SAMLRequest={base64SamlRequest} 作为 URL 的一部分进行模板化。
restTemplate.exchange(endpoint, method, httpEntity, String.class, base64SamlRequest);
启用日志记录 logging.level.org.apache.http=DEBUG 我可以看到 + 字符是 url 参数中的纯文本(未编码)。
如何强制对这些进行编码?或者我可以在上面的代码中改变什么来正确编码?
【问题讨论】:
-
@AmolRaje 我试过
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);,但还是不行。 -
ok.. 编码成字符串后将加字符改成 %2B 然后传递给 url
-
base64SamlRequest = base64SamlRequest .replaceAll("+", "%2B")然后传给url
标签: spring spring-boot