73

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

使用できると思いrequest.getProtocol()ましたが、どちらの方法でもHTTP/1.1が返されます。

何か案は?

4

4 に答える 4

102

HttpServetRequest.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
于 2011-11-21T08:10:02.557 に答える
29

You can't reliably depend on port numbers.
But you can depend on the scheme:

Use: request.getScheme() to see if it is https.

If it is then it is secure connection.

I believe this should work regardless of Tomcat version

于 2011-11-20T10:43:51.063 に答える
11

セキュアです。継承されたメソッドを確認してください。

于 2011-11-20T10:21:45.867 に答える
-4

https と http は異なるポートで実行されます。したがって、リクエストからポートを取得し、リクエストがどのポートから来たかを知ることができるため、プロトコルを知ることができます。int port=request.getServerPort();

于 2011-11-20T10:27:44.160 に答える