web-dev-qa-db-ja.com

サーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかを知るにはどうすればよいですか?

Javaでサーブレットを作成しました。そのサーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかを知りたいです。

request.getProtocol()を使用できると思いましたが、両方のメソッドでHTTP/1.1を返します。

何か案は?

66
ufk

HttpSerlvetRequest.isSecure()が答えです。 ServletContainerは、次の場合にtrueを返す責任があります。

  • ServletContainer自体がhttpsでリクエストを受け入れることができる場合。
  • ServletContainerの前にLoadBalancerがある場合。そして、LoadBlancerはhttpsでリクエストを受け取り、plain httpでServletContainerに同じものをディスパッチしました。この場合、LoadBalancerはX-SSL-Secure:trueヘッダーをServletContainerに送信します。

コンテナは、リクエストがhttpsで受信されたときに、このリクエスト属性を利用可能にする必要もあります。

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate
96
Ramesh PVK

確実にポート番号に依存することはできません。
ただし、スキームに依存することができます。

request.getScheme() を使用して、httpsかどうかを確認します。

その場合は、安全な接続です。

これはTomcatのバージョンに関係なく機能するはずです

27
Cratylus

isSecure 。継承されたメソッドを必ず確認してください。

10