我如何知道对 servlet 的请求是使用 HTTP 还是 HTTPS 执行的?

问题描述 投票:0回答:3

我用 Java 编写了一个 servlet,我想知道对该 servlet 的请求是使用 HTTP 还是 HTTPS 执行的。

我以为我可以使用

request.getProtocol()
,但两种方法都返回 HTTP/1.1。

有什么想法吗?

java servlets ssl https http-protocols
3个回答
105
投票

HttpServletRequest.isSecure()
就是答案。 ServletContainer 负责在以下情况下返回 true:

  • 如果 ServletContainer 本身可以接受 https 上的请求。
  • 如果 ServletContainer 前面有一个 LoadBalancer,并且负载均衡器已在 https 上收到请求,并将其分派到 plain http 上的 ServletContainer。在这种情况下,LoadBalancer 会向 ServletContainer 发送
    X-SSL-Secure : true
    标头,应该尊重该标头。

当在 https 上收到请求时,容器还应该使此请求属性可用:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate

29
投票

您不能可靠地依赖端口号。
但您可以依赖该方案:

使用:request.getScheme()查看是否为

https

如果是,则连接安全。

我相信无论 Tomcat 版本如何,这都应该有效


11
投票

安全。 请务必检查继承的方法。

© www.soinside.com 2019 - 2024. All rights reserved.