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

ufk*_*ufk 66 java ssl https servlets http-protocols

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

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

有任何想法吗?

Ram*_*PVK 97

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

  • 如果ServletContainer本身可以接受https上的请求.
  • 如果ServletContainer前面有一个LoadBalancer.并且,LoadBlancer已经获得了https上的请求,并已将其发送到普通http上的ServletContainer .在这种情况下,LoadBalancer将X-SSL-Secure:true标头发送到ServletContainer,这应该受到尊重.

https上收到请求时,Container还应该使此请求属性可用:

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

  • 你能否分享一下'X-SSL-Secure:true'位?我一直在搜索,我找不到关于这个标题的更多信息. (2认同)

Cra*_*lus 29

您无法可靠地依赖端口号.
但你可以依赖于这个计划:

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

如果是,则它是安全连接.

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


Mat*_*hen 11

isSecure.一定要检查继承的方法.