1

对于我的 Java EE Web 应用程序,我遇到了问题。我需要使用我编写的 Spring 控制器将页面 A 重定向到另一个页面 B:

页面 A 用于我的浏览器(在 http 中):

      http://MYPUBLICSERVERNAME/MYCONTEXT/A.do :

在作为 Spring 控制器的 A 中,具有以下重定向代码:

@RequestMapping(method = RequestMethod.GET, value = "/A.do")
public String searchProfiles(){
....
return "redirect:/B.html";
}

它在http中完美运行。所以我去 B :

  http://MYPUBLICSERVERNAME/MYCONTEXT/B.html

问题来自 HTTPS,因为使用 HTTPS 的反向代理拦截了请求:

这个代理在同一台机器上,我得到:

无法连接,因为当我去:

httpS://MYPUBLICSERVERNAME/MYCONTEXT/A.do

我希望被重定向到:

httpS://MYPUBLICSERVERNAME/MYCONTEXT/B.html

相反,浏览器被重定向到

 http://localhost/MYCONTEXT/B.html

我知道对于服务器,客户端是反向代理,当然不是浏览器。

所以我的问题是:servlet 如何获取原始服务器名称,我的意思是 Web 浏览器中指示的服务器名称(MYPUBLICSERVERNAME)和协议(如果是 HTTPS,则为 HTTPS)。

我认为解决方法是使用浏览器提供的 cookie,因为浏览器只知道 MYPUBLICSERVERNAME 但可能存在更优雅的解决方案?

当然,如果我知道一个可以使用预期协议和服务器名称神奇地重定向的 spring 函数,那也没关系,但我没有找到它。

感谢您的回答

4

1 回答 1

2

您可以将重定向与整个路径和协议一起使用

   return "redirect:https://MYPUBLICSERVERNAME/MYCONTEXT/B.html"

我不确定您是否可以在请求中使用引用者标头(代理会更改引用者吗?)

String referrer = request.getHeader("referer");
于 2013-03-27T09:47:14.487 回答