私は現在 Play! を使用しています。1.2.2 とその新しい Netty クライアント フレームワーク。
HTTP と HTTPS を非同期で提供することはできますが、SSL を強制する簡単な方法は見つかりませんでした。Play! を使ったことのある人なら誰でも参加できます。SSL を強制する簡単な方法はありますか? リダイレクトを作成する必要があるかどうか、またはこれをファイルですばやく解決できるかどうかはわかりませんconf
。
私は現在 Play! を使用しています。1.2.2 とその新しい Netty クライアント フレームワーク。
HTTP と HTTPS を非同期で提供することはできますが、SSL を強制する簡単な方法は見つかりませんでした。Play! を使ったことのある人なら誰でも参加できます。SSL を強制する簡単な方法はありますか? リダイレクトを作成する必要があるかどうか、またはこれをファイルですばやく解決できるかどうかはわかりませんconf
。
SSL を適用するには、いくつかの方法があります。
まず、.secure()
メソッドを使用するようにすべてのアクションを設定できます。たとえば、
<a href="@{Application.index.secure()}">index page</a>
あるいは、おそらく最良の方法は、Apache、Nginx、Lighttpd などのフロントエンド HTTP サーバーを介してこれを行うことです。
フロントエンド http サーバーの考え方は、アプリケーションがポート 9000 で実行されますが、外部ネットワークからはアクセスできないということです。HTTP はすべての着信要求を処理し、HTTPS のみを受け入れるように構成されています。HTTPS は HTTP サーバーによって処理され、リクエストは Play に転送されます。
これにより、Play アプリケーション全体が通常どおり動作し、SSL は別のアプリケーションにオフロードされます。
これと同じ方法を HTTP サーバーではなくロード バランサーに適用することもできますが、企業環境で実行しない限り、大多数の人ははるかに安価な HTTP サーバーの代替手段を使用すると思います。
コントローラーでは、request.secure に対してチェックし、リダイレクトを実行するか、403/アクセスが拒否されたことを返すことができます。
これを行うと、コントローラー全体に SSL を強制できます。
public static class ForceSSL extends Controller
{
@Before
static void verifySSL()
{
if (request.secure == false)
redirect("https://" + request.host + request.url);
}
}
...そして別のコントローラに注釈を付けます:
@With(ForceSSL.class)
public class Foo extends Controller
{
....
}
http://groups.google.com/group/play-framework/browse_thread/thread/7b9aa36be85d0f7bも参照してください。