当前位置: 首页 > 知识库问答 >
问题:

如何重现发送重定向问题-HTTPS更改为HTTP

习淇
2023-03-14

我用的是回应。sendRedirect()用于在用户成功通过身份验证后将用户重定向到主页。这是为了避免“登录重定向漏洞”。

然而,由于上述变化,我的一个客户面临的问题是他的HTTPS请求被转换为HTTP(网址中有ip地址)。同样的原因在这里解释

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

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

在ApacheHTTPD中。我有以下条目

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

在客户环境中,他被重定向到App server(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头中的URL?

共有3个答案

壤驷喜
2023-03-14

我能够重现客户面临的问题(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转换。

袁鸿达
2023-03-14

请参见此链接。。

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

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

公孙驰
2023-03-14

我不确定您是否真的在使用负载均衡器,或者您是否只是将其中一个方法称为getLoadBalancerRequest estURI,但如果您只有一个服务器,则只需使用:

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

没有必要指定完整的url。

但是,如果您确实需要构建完整的url,您可以使用以下内容来检查其https://

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

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

 类似资料:
  • 有一个设置,比如在www.xyz.com上运行一个应用程序,并且有一个报告使rest访问托管在www.abc.com上的应用程序。 由于IE8上CORS的奇怪问题,我们在www.xyz.com上进行rest访问,但实际上服务是在www.abc.com上托管的,所以在ngnix级别上,我们将rest请求从www.xyz.com重定向到www.abc.com。

  • 问题内容: 我有一个简单的Express.js实例,该实例为单个页面Angular应用程序提供静态资产。我在Express配置上设置了一些中间件,以便为所有路由返回index.html,并且Angular可以从那里加载。 最近,我在Heroku上设置了SSL,并希望确保所有来自HTTP的流量都重定向到HTTPS。我想建议的解决方案相结合,从这个帖子有什么我现在有,但在一个无限重定向循环结束了。 简

  • 我已经重定向到网站的主页: 但是如果您键入,则重定向到但我需要立即重定向到

  • 如果其当前使用 HTTP 访问,则将页面重定向到 HTTPS 中。 另外,按下后退按钮不会将其退回到历史记录中的HTTP页面。 使用 location.protocol 获取当前正在使用的协议。 如果不是 HTTPS ,使用 location.replace() 将现有页面替换为 HTTPS 版本。 使用 location.href 获取完整的地址,用 String.split() 拆分完整的地址

  • 我向AWS部署了一个SpringBoot web应用程序,并为域配置了SSL证书。每次单击映射到的“登录”按钮时: 我被重定向到https登录页面。然而,当用户尝试访问需要授权的页面时,他会被重定向到不安全的http登录页面。我的Spring Security如下所示: 下面是一个实时示例:test4test.io

  • 隐私设置->清除浏览数据(从时间开始) https/ssl->管理证书->删除所有项(包括证书) 检查没有书签。 Firefox也有类似的问题,但它的解决方案不适用于Chrome。有人对我能做些什么有什么建议吗?提前感谢您的帮助!