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



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

我想我可以使用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

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

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

如果是,则是安全连接。

无论Tomcat版本如何

isSecure。请务必检查继承的方法

最新更新