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”——但我假设有一种真正受支持的方式来执行此操作。

4

1 回答 1

2

使用自签名证书或官方证书都没有关系。如果 SSL/TLS 未在部署容器中终止,“isSecure()”将默认返回“false”。但是,即使 SSL/TLS 未在部署容器处终止,某些部署容器(如 Tomcat)也可以配置为为“isSecure()”调用返回“true”。例如,如果 SSL 在(硬件)负载平衡器处终止并且“sendRedirect()”与相对 URL 一起使用,这将很有帮助。

于 2012-10-20T20:04:32.180 回答