gpt4 book ai didi

java - 在 Spring MVC Controller 中代理 HttpServletRequest 的最简单方法

转载 作者:可可西里 更新时间:2023-11-01 16:36:29 35 4
gpt4 key购买 nike

我正在使用 spring-mvc 构建 REST 服务,我现在正在寻找一种从 Spring MVC Controller 内部将 HTTP 请求代理到外部 REST 服务的方法。

我正在获取 HttpServletRequest 对象并希望代理它进行尽可能少的更改。对我来说重要的是保持传入请求的所有 header 和属性不变。

@RequestMapping('/gateway/**')
def proxy(HttpServletRequest httpRequest) {
...
}

我只是尝试使用 RestTemplate 向外部资源发送另一个 HTTP 请求,但我没能找到复制 REQUEST ATTRIBUTES 的方法(这对我来说非常重要).

提前致谢!

最佳答案

我在 Kotlin 中编写了这个 ProxyController 方法,将所有传入请求转发到远程服务(由主机和端口定义),如下所示:

@RequestMapping("/**")
fun proxy(requestEntity: RequestEntity<Any>, @RequestParam params: HashMap<String, String>): ResponseEntity<Any> {
val remoteService = URI.create("http://remote.service")
val uri = requestEntity.url.run {
URI(scheme, userInfo, remoteService.host, remoteService.port, path, query, fragment)
}

val forward = RequestEntity(
requestEntity.body, requestEntity.headers,
requestEntity.method, uri
)

return restTemplate.exchange(forward)
}

请注意,远程服务的 API 应与此服务完全相同。

关于java - 在 Spring MVC Controller 中代理 HttpServletRequest 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441586/

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