【发布时间】:2012-10-20 15:07:39
【问题描述】:
我只是想知道当前 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”——但我假设有一种真正受支持的方法。
【问题讨论】:
-
java ee doc 说
isSecure()返回一个布尔值,指示此请求是否使用安全通道(例如 HTTPS)发出。它似乎并不关心自签名证书。 -
只是猜测,但是您是否尝试过使用真正的签名证书?也许它返回 false 因为自签名证书不安全。
-
isSecure应该可以工作,但这也取决于您的环境,例如您的 HTTP 反向代理配置。是否有任何 HTTP 服务器保护您的应用程序服务器?