1

一部のURLにはHTTPS経由でのみアクセスする必要があると定義したJavaWebアプリがあります。これは、以下のようにweb.xmlのセキュリティ制約定義を使用して行われます。

<security-constraint>
                <web-resource-collection>
                        <web-resource-name>SSL URLs</web-resource-name>
                        <url-pattern>/j_spring_security_check</url-pattern>
                        <url-pattern>/secure/account/create</url-pattern>
                        <url-pattern>/register</url-pattern>
                        <url-pattern>/login/*</url-pattern>
                        <url-pattern>/</url-pattern>
                        <http-method>GET</http-method>
                <http-method>POST</http-method>
                </web-resource-collection>
                <user-data-constraint>
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                </user-data-constraint>
        </security-constraint>

私の問題は、アプリケーションをHerokuにデプロイし、SSL接続をピギーバックしようとすると、アプリケーションがロードバランサーの背後にあり、アプリに着信する各リクエストがHTTPであるため、web.xmlでの上記の定義によりSSL URLにリダイレクトします。SSLURLは再びHTTPとしてアプリに送られるため、ブラウザにエラーとして表示されるリダイレクトループになります。

これを処理する方法がよくわかりません。元のリクエストがhttpsかhttpかを教えてくれるx-forwarded-protoを見ることができると読みましたが、どうしたらよいかわかりません。上記のセキュリティ制約が常に発生するためです。セキュリティ制約セクションを削除して、プログラムでhttpsを適用する必要がありますか?それは私には理想的ではないようです。

4

1 に答える 1

0

ロードバランサーがSSLに関する情報を転送することを確認してください。そうすれば、アプリケーションサーバー自体への接続が暗号化されていない場合でも、アプリケーションは接続が暗号化されていることを認識できるはずです。

于 2012-11-26T07:28:57.203 に答える