如何解决request.getScheme方法返回错误的值
我在jsp中有一个https-https重定向代码。我正在尝试通过以下代码应用重定向逻辑:
String uri = request.getRequestURI();
String servername = request.getServerName();
String contextPath = request.getContextPath();
String scheme = request.getScheme();
int portname = request.getServerPort();
if(scheme.startsWith("https")){
String port = workBean.getProperty("SSLPort");
response.sendRedirect("https://"+servername+":"+ port +"/xyz/login.jsp");
} else {
String port = workBean.getProperty("HttpPort");
response.sendRedirect("http://"+servername+":"+port+"/xyz/login.jsp");
}
但是if条件不适用于https。我正在为https使用负载均衡器。
请告诉我我在哪里做错了以及如何解决此问题。
解决方法
如果使用的是负载均衡器,是否尝试检查标题X-Forwarded-Proto
。许多负载平衡器/代理都设置了此标头,也可以将它们配置为设置此标头。
取决于您使用的是什么servlet容器以及如何配置它,头X-Forwarded-Proto
的值有时会被scheme字段直接使用。
但是您也可以自己从请求中读取标头,并使用它代替可用的方案。
X-Forwarded-Proto(XFP)标头是事实上的标准标头,用于标识客户端用来连接到代理或负载均衡器的协议(HTTP或HTTPS)。 [...]要确定客户端和负载平衡器之间使用的协议,可以使用X-Forwarded-Proto请求标头。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。