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

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

我以为我可以使用request.getProtocol()但它返回两个方法的HTTP / 1.1。

有任何想法吗?

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

  • 如果ServletContainer本身可以接受https请求。
  • 如果在ServletContainer之前有一个LoadBalancer。 而且,LoadBlancer已经在https上获得了请求,并且已经将其分发到纯http上的ServletContainer。 在这种情况下,LoadBalancer会将X-SSL-Secure:true头发送给ServletContainer,这应该得到遵守。

容器也应该使这个请求属性在https

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

你不能可靠地依靠端口号。
但是你可以依靠这个scheme:

使用: request.getScheme()来查看它是否是https

如果是的话就是安全连接。

我相信这应该工作,不pipeTomcat版本

isSecure 。 一定要检查inheritance的方法。

https和http在不同的端口上运行。 因此,您可以从请求中获取端口,并知道请求来自哪个端口,以便您可以了解协议。 int port = request.getServerPort();

Interesting Posts