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

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

我认为我可以使用 request.getProtocol(),但它在两种方法上都返回 HTTP/1.1。

有什么想法吗?

53508 次浏览

你不能完全依赖端口号。
但你可以依靠这个计划:

使用: GetScheme ()看看它是否是 https

如果是,那么它是安全连接。

我相信无论 Tomcat 版本如何,这都应该能够工作

答案是 HttpSerlvetRequest.isSecure () :

  • 如果 ServletContainer 本身可以接受 https 上的请求。
  • 如果 ServletContainer 前面有一个负载均衡器。而且,LoadBlancer 在 Https上获得了请求,并在 原文上将请求发送给 ServletContainer。在这种情况下,LoadBalancer 将 X-SSL-Secure: true 标头发送到 ServletContainer,这应该得到遵守。

当在 Https上接收请求时,Container 还应该使这个请求属性可用:

  • Javax.servlet.http.sslsessionid
  • Key _ size
  • 请求.X509证书