我有一个由前端代码组成的Web应用程序,该代码调用由两个后端模块实现的相同api。此api在JSON对象中返回网址。后端模块都是用spring mvc编写的,但是版本不同。 网址构建是相同的,并且是这样的:
@GetMapping(path = "/app1/menu", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public JsonObject getMenu(HttpServletRequest req) throws IOException {
JsonObject menu = new JsonObject();
menu.addProperty("href", ServletUriComponentsBuilder.fromRequest(req)
.replacePath(req.getContextPath())
.path("/index.html")
.toUriString());
return menu;
}
如您所见,此代码只是向传入请求添加一个常量并返回它。 第一个应用程序使用spring mvc 4(准确地说是4.3.5.RELEASE)。 第二个模块使用5.1.4.RELEASE版本。 当所有这些应用程序都部署在负载平衡的服务器(预先装有负载平衡器的2个tomcat实例)和https上时,就会出现问题。 假设对于app1,请求网址是这样的:
https://example.com/context/app1/menu
app1正确返回
https://example.com/context/index.html
对于app2,前端发出的请求为 https://example.com/context/app2/menu
答案是 http://example.com/context/another_index.html
因此它松开了https方案
似乎ServletUriComponentsBuilder.fromRequest的行为已更改? 我(快速承认)查看了git repo中的提交,但还没有 发现任何东西....