私はJavaでサーブレットを作成しました。そのサーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかを知りたいと思います。サーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかをどのように知ることができますか?
私はrequest.getProtocol()
を使用できると思っていましたが、両方の方法でHTTP/1.1を返します。
アイデア?
私はJavaでサーブレットを作成しました。そのサーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかを知りたいと思います。サーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかをどのように知ることができますか?
私はrequest.getProtocol()
を使用できると思っていましたが、両方の方法でHTTP/1.1を返します。
アイデア?
HttpSerlvetRequest.isSecure(の動作するはずと信じて)が答えです。 ServletContainerは、次の場合にtrueを返す責任があります。
コンテナは、リクエストがHTTPS上で受信されたときに、この要求が利用可能な属性にする必要があります。
isSecure。継承されたメソッドを必ず確認してください。
httpsとhttpは異なるポートで実行されます。したがって、リクエストからポートを取得し、要求がどのポートから来たのかを知ることができ、プロトコルを知ることができます。 int port = request.getServerPort();
@Krishnanのポート番号は任意です...私は44でHTTPを実行できます3およびHTTPS on 80またはそれらの任意の組み合わせ。 – hd1
ポート番号は信頼できるものではありません。
しかし、あなたはスキームに依存することができます:それはhttps
であるかどうかを確認するためにrequest.getScheme():
使用。
これは安全な接続です。
私は、これは関係なく、Tomcatのバージョン
isSecureは少なくとも[1.2](http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29)に戻り、Tomcat固有ではありません。 –
あなたは「X-SSL-Secure:本当ですか?私は検索を続けて、私はこのヘッダーに関する詳細を見つけることができません。 – Zotov
これは私の環境では動作しません:フロントプロキシとしてのApache 2.4.10;それは、Javaで知ることは不可能である、という要求はhttpまたはhttpsでapacheに行われています。確かに、私はhttp:// Javaとして取得しますが、フロントプロキシにどのようにアクセスしたかを知る必要があります。 - 確かに、@ Zotovも言及したように:X-SSL-Sercureヘッダーに関する情報はほとんどありません。だから私はこれが広く実装されていないと思う? – badera
ヘッダー名はそれほど標準的ではないので、異なる場合があります。しかし、ここでのコンセプトは、プロキシがSSLに関するヘッダーを追加し、サーバーがそれらを読み取ることができるということです。 Exの場合、NginxはX-SSL-Protocolを追加しています。カスタムヘッダーに置き換えることもできます。 –