gpt4 book ai didi

servlets - 如何重现 sendRedirect 问题 - HTTPS 更改为 HTTP

转载 作者:行者123 更新时间:2023-12-04 18:09:04 24 4
gpt4 key购买 nike

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

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

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 是针对 Tomcat 服务器的。我们期望的是在重定向 URL 中包含负载均衡器 URL。

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

最佳答案

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

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

没有必要指定完整的 url。

但是,如果您确实需要像正在做的那样构建完整的 url,则可以使用类似这样的方法来检查其 https://
String protocol = "https";
if( request.getRequestURL().toString().toLowerCase().startsWith("http://" ) )
{
protocol = "http";
}

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

关于servlets - 如何重现 sendRedirect 问题 - HTTPS 更改为 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18891210/

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