【问题标题】:Get HTTP or HTTPS from Current URL从当前 URL 获取 HTTP 或 HTTPS
【发布时间】: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 docisSecure() 返回一个布尔值,指示此请求是否使用安全通道(例如 HTTPS)发出。它似乎并不关心自签名证书。
  • 只是猜测,但是您是否尝试过使用真正的签名证书?也许它返回 false 因为自签名证书不安全。
  • isSecure 应该可以工作,但这也取决于您的环境,例如您的 HTTP 反向代理配置。是否有任何 HTTP 服务器保护您的应用程序服务器?

标签: java jsp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2023-04-04
    • 2011-07-14
    • 2012-07-05
    • 2010-10-30
    • 2015-11-04
    相关资源
    最近更新 更多