从当前URL获取HTTP或HTTPS

3

我只想知道当前URL是HTTP还是HTTPS。问题在于我们的测试环境中有许多自签名证书,因此验证证书可能不是一个选项。我已经尝试过以下方法,但它们似乎并不适用于所有情况。

String protocol = request.getProtocol();
out.println(protocol); // prints out HTTP/1.1 on self signed servers

Boolean secure = ((HttpServletRequest)pageContext.getRequest()).isSecure();
if (secure) {
  out.println("secure")
} else {
  out.println("not secure")  // always fails
}

我想我可以使用getRequest并搜索字符串中的“https”-但我假设有一种真正支持的方法来做到这一点。

我可以使用getRequest并搜索字符串中的“https”-但我假设有一种真正支持的方法来做到这一点。

Java EE文档(http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#isSecure%28%29)指出,`isSecure()`返回一个布尔值,表示此请求是否使用安全通道进行,例如HTTPS。它似乎并不关心自签名证书。 - Haozhun
只是猜测,你是否尝试过使用真实的签名证书?也许它返回false是因为自签名证书不安全。 - Teemu Ikonen
isSecure 应该可以工作,但它也取决于您的环境,例如您的 HTTP 反向代理配置。有任何 HTTP 服务器保护您的应用程序服务器吗? - home
1个回答

2
无论是自签名证书还是官方证书都没有关系。如果SSL/TLS未在部署容器中终止,则'isSecure()'默认返回'false'。然而,像Tomcat这样的一些部署容器可以配置为在SSL/TLS未在部署容器中终止时返回'isSecure()'调用的'true'。例如,如果SSL在(硬件)负载平衡器上终止并使用相对URL进行'sendRedirect()',则这很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接