我用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。请务必检查继承的方法