spring - 在 api 中添加自定义休息标头不起作用
问题描述
我需要通过我自己的 api 调用第三方 api。第三方 api 需要自定义标头进行身份验证,我不希望将其暴露给客户端。所以我所做的是添加自定义标头并在我的 api 中调用第三方 api。但它不起作用。
@GetMapping(value = "/downloadCompletedDocument/{id}", produces = MediaType.APPLICATION_PDF_VALUE)
public ResponseEntity<byte[]> download(@PathVariable("id") String id, @RequestHeader Map header)
{
HttpHeaders headers = new HttpHeaders();
headers.set("userloginname", "testUser");
headers.set("organizationkey", "testOrganization");
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<byte[]> responseObj = restTemplate
.exchange(url + id, HttpMethod.GET, requestEntity,
byte[].class);
return responseObj;
}
但是当我通过传递标头使用该工具时,它可以成功运行。这是我不明白的。
PS:我试过过滤器,但结果相同。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
MutableHttpServletRequest mutableRequest = new MutableHttpServletRequest(req);
Enumeration<String> a = req.getHeaderNames();
mutableRequest.putHeader("userloginname", "testUser");
mutableRequest.putHeader("organizationkey", "testOrganization");
Enumeration<String> b = mutableRequest.getHeaderNames();
chain.doFilter(mutableRequest, response);
}
解决方案
我通过将第三方 api url 从 http 更改为 https 解决了这个问题。不知道为什么这不会影响其余客户端工具。
推荐阅读
- python - python中的一个大if ... elif我想在一行中改进
- javascript - 如何制作用于单击网页上的按钮的脚本?
- api - 如何在 infobip 上个性化电子邮件
- tensorflow - Keras Upsampling2d -> tflite 转换导致形状推断失败和未定义的输出形状
- c++ - 无法从“<brace-enclosed initializer list>”转换为向量
- jquery - 如果输入表单有效,我如何显示消息
- tensorflow - tensorflow - nn.softmax 是否采取措施防止 exp(x) 变为 +inf
- python-3.x - 如何防止python中的内存需求增加以克服内存不足错误?
- xcode - 如何设置 Bundle Ids、App Identifiers 和 Provisioning Profiles 以发布使用 SwiftUI 和 XCode 制作的 WatchOs 应用程序?
- javascript - 粘性副标题在滚动时闪烁