4

一旦用户成功通过身份验证,我正在使用 response.sendRedirect() 将用户重定向到主页。这是为了避免“登录重定向漏洞”。

但是,由于上述更改,我的一位客户面临着他的 HTTPS 请求被转换为 HTTP(在 URL 中带有 ip 地址)的问题。这里解释了相同的原因

http://geekexplains.blogspot.in/2008/06/https-becoming-http-in-case-of.html

现在,我如何重现该问题(或设置环境),以便验证我的修复。我以为我可以通过在 tomcat 前面设置 Apache 服务器来重现,但我无法重现上述问题。

在 Apache httpd.conf 我有以下条目

ProxyPass /myconsole ajp://localhost:8009/myconsole
ProxyPassReverse /myconsole ajp://localhost:8009/myconsole

访问应用程序,例如

http://myapacheserver/myconsole/Login.jsp

成功登录后,我被重定向到

http://myapacheserver/myconsole/Home.jsp

我希望重定向到 IP 地址。类似的东西http://10.32.24.14:8080/myconsole/Home.jsp

在客户环境中,他被重定向到应用服务器(tomcat)的 IP 地址。

任何指针都会有所帮助。

谢谢

注意:对于那些感兴趣的人,我通过从配置文件中获取 URI 的第一部分来构建完整的 URL。

//Get the LB URI part. Eg: https://dev.loadbalancer.com/
String loadBalancerURI = getConfig().getLoadBalancerRequestURI();
String redirectURL = request.getContextPath() + "/Home.jsp";

//Prepend the LoadBalancer URI with redirect URI
if(loadBalancerURI != null)
{
    redirectURL = loadBalancerURI + "/" + redirectURL;  
}

//redirect to home page
response.sendRedirect(redirectURL);

return;

编辑:有关设置的更多信息。客户有 F5 负载平衡器,SSL 流量在此停止,然后有一个 Apache 反向代理服务器,它代理到 tomcat 服务器池。问题是当我们重定向重定向 URL 时,重定向 URL 是针对 Tomcat 服务器的。我们期望在重定向 URL 中有负载均衡器 URL。

是否可以在 Apache 服务器中进行一些更改,以重写 Tomcat 发送的响应中 HTTP 标头中的 URL?

4

3 回答 3

2

我不确定您是否真的在使用负载平衡器,或者您是否只是调用了您的方法之一 getLoadBalancerRequestURI,但是如果您只有一台服务器,只需使用:

response.sendRedirect("./Home.jsp");

没有必要指定完整的 url。

但是如果你确实需要像你一样构建完整的 url,你可以使用这样的东西来检查它是否 https://

String protocol = "https";
if( request.getRequestURL().toString().toLowerCase().startsWith("http://" ) )
{
    protocol = "http";
}

然后确保使用正确的协议构建 url。

于 2013-09-19T20:10:45.463 回答
1

看到这个链接..

因此,当发生 https 请求重定向时,目标服务器不知道原始请求的协议是什么。它只接收一个http请求。因此,对此的响应将是一个 http 响应。

http://www.hoitikwong.com/2013/03/the-mystery-case-of-https-becoming-http.html

于 2014-01-29T03:59:36.760 回答
0

我能够重现我的客户面临的问题(当 HTTP-HTTPS 重定向时)。

从 Apache(HTTPD 服务器)到 Tomcat(Web 容器)的通信通常使用以下连接器之一进行(也可能是其他方式)。

  • mod_jk
  • mod_proxy_ajp
  • mod_proxy_http
  • mod_rewrite

只有当我使用 mod_rewrite 时,我才能重现该问题。如果我使用 mod_jk 或 mod_proxy_ajp 或 mod_proxy_http 方法,则重定向工作正常。但是当我使用 mod_rewrite 时,当重定向发生时,我能够观察到 HTTPS-HTTP 转换。

于 2014-03-18T10:24:51.877 回答