gpt4 book ai didi

spring-mvc - spring mvc http代理

转载 作者:行者123 更新时间:2023-12-01 05:01:04 25 4
gpt4 key购买 nike

我想编写一个 spring MVC Controller 类,它只接受输入中的任何 http 请求,向其中添加基本的身份验证 header 并将此请求转发到另一台服务器。
我尝试这样的事情没有成功。

    @Controller
@RequestMapping("/proxyws")
public class ProxyController {

@RequestMapping("/**")
@ResponseBody
public String mirrorRest( @RequestBody String body, HttpMethod method, HttpServletRequest request, HttpServletResponse response) throws URISyntaxException
{

String server = "localhost";
int port = 8080;
URI uri = new URI("http", null, server, port, request.getRequestURI(), request.getQueryString(), null);
RestTemplate restTemplate=new RestTemplate();
HttpEntity entity = new HttpEntity<String>(body);
String plainCreds = "APP_CLIENT:APP_PASSWORD";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
entity.getHeaders().add("Authorization", "Basic " + base64Creds);

ResponseEntity<String> responseEntity = restTemplate.exchange(uri, method, entity, String.class);

return responseEntity.getBody();
}

对于输入中的 GET 方法,我收到以下异常:
org.springframework.http.converter.HttpMessageNotReadableException:缺少所需的请求正文内容:
org.springframework.web.method.HandlerMethod$HandlerMethodParameter@8051792a
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleEmptyBody(RequestResponseBodyMethodProcessor.java:189)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:170)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:105)

对于 POST 请求,我在 le basic auth header 方面遇到了其他问题:
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.put(Collections.java:1342)
at org.springframework.http.HttpHeaders.add(HttpHeaders.java:831)

感谢您的帮助!

最佳答案

您不能修改 HttpEntity 的标题对象一旦被实例化。您需要通过不同的 HttpEntity 传递您的标题。构造函数,例如

public HttpEntity(T body, MultiValueMap<String, String> headers) {
this.body = body;
HttpHeaders tempHeaders = new HttpHeaders();
if (headers != null) {
tempHeaders.putAll(headers);
}
this.headers = HttpHeaders.readOnlyHttpHeaders(tempHeaders);
}

注意 this.headers的初始化: 这就是创建只读副本的地方。

关于spring-mvc - spring mvc http代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32648059/

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