我如何知道对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();