我正在尝试将请求转发到Spring Boot中的另一个URL。
我知道如何在同一Spring Boot应用程序中将请求从一个端点转发到另一个端点。此代码类似于-
@GetMapping("/home")
public ModelAndView home(@PathVariable(name = "env", required = false) String env) {
return new ModelAndView("index");
}
@GetMapping("/forward")
String callForward(){
return "forward:/home";
}
这里,如果我转到http://localhost:8080/forward,它将通过“ / home”端点作为服务器,并且我们将呈现主页。有趣的是,浏览器中的“ URL”保持不变http://localhost:8080/forward。
[我的要求是>例如,当我调用http://localhost:8080/forward时,我想转发给任何第三方URL,我希望它由https://google.com/forward提供。
我该怎么办。
我愿意接受任何可以满足要求的解决方案。
Forward
与Redirect
之间存在差异。
Forward:发生在服务器端,servlet容器将相同的请求转发到目标URL,因此客户端/浏览器将不会注意到差异。
重定向:在这种情况下,服务器以302以及位置标头中的新URL进行响应,然后客户端向给定URL发出另一个请求。因此,在浏览器中可见
关于您的关注,可以使用多种方法来实现。
使用RedirectView
@GetMapping("/redirect")
RedirectView callRedirect(){
return new RedirectView("https://www.google.com/redirect");
}
与ModelAndView
一起使用Prefix
@GetMapping("/redirect")
ModelAndView callRedirectWithPrefix(){
return new ModelAndView("redirect://www.google.com/redirect");
}
类似的也可以用于转发
@GetMapping("/forward")
ModelAndView callForward(){
return new ModelAndView("forward://www.google.com/forward");
}
第二种方法(使用ModelAndView
是可取的,因为在这种情况下,您的控制器在重定向或转发或仅返回某些页面的位置将保持不变。
注:如评论中所述,如果您正在寻找代理请求,我建议您检查此SO Thread