私が行う必要があるもの: TLS(つまりhttps)を超えないHTTPリクエストを拒否する方法を理解する必要があります。理想的には、要求がhttpsを超えていない場合は、httpステータス404(見つからない)を返すことができます。Apache cxf/jaxrs以外のhttps要求を拒否する方法
私の実装は次のようになります。 Apache cxf/jaxrsを使用してRESTサービスを実装しています。 私は、SpringのIoCを使用してサービスを作成しています。
Springアプリケーションコンテキストファイルのサービス定義は次のようになります。
<jaxrs:server id="testSvc" address="/">
<jaxrs:serviceBeans>
<ref bean="svcBean"/>
</jaxrs:serviceBeans>
</jaxrs:server>
サービスは、Tomcatの内部で実行されています。
単純なサーブレットフィルタまたはjax-rsフィルタ(たとえば、javax.ws.rs.container.ContainerRequestFilterを継承するもの)を使用することを考えています。
これを行うより良い方法はありますか?
良い応答が、私の質問では、ContainerRequestFilterを*可能な*解決策として特定していますが、「これを行うより良い方法はありますか?」という質問をします。 サーブレットフィルタまたはContainerRquestFilter以外のソリューションを探しています。 – mangotang
最も簡単な解決策は、tomcatまたはSSLプロキシでhttpプロトコルを無効にすることです。しかし、私はあなたが他のサービスのために必要と思った。 http/httpsを受け入れるには、適切な解決策がフィルタです。 J2EE標準フィルタでは、サーバごとにカスタマイズすることはできません。また、CXFインターセプタの使用を検討することもできますが、単純ではありません。このタイプのアクションでは、CXF3.0の 'ContextRequestFilter'が利用可能です(サービスメソッドが呼び出される前にメッセージを前処理しています)。 – pedrofb
残念ながら私はCXF 2.2.12に固執しています。 ContextRequestFilterはそのバージョンには存在しません。だから、私はCXFインターセプタを使用しました。それは正常に動作しているようです。 – mangotang