2011-08-17 14 views
21

私は現在Playを使用しています! 1.2.2とその新しいNettyクライアントフレームワークです。再生時にSSLを適用してください!フレームワーク

HTTPとHTTPSを非同期で処理することはできますが、SSLを強制する簡単な方法はありませんでした。 Playで働いている人は誰ですか? SSLを強制する簡単な方法がありますか?リダイレクトを作成する必要がある場合、またはconfファイルでこれをすばやく解決できるかどうかは不明です。

答えて

22

SSLを実施するにはいくつかの方法があります。

まず、あなたが

<a href="@{Application.index.secure()}">index page</a> 

また例えば、.secure()メソッドを使用するすべてのアクションを設定することができ、そしておそらく最良の方法は、そのようなApacheのは、nginxのように、フロントエンドHTTPサーバを経由して、これを行うことですまたはLighttpd。

フロントエンドhttpサーバーのアイデアは、アプリケーションがポート9000上で動作するが、外部ネットワークからはアクセスできないということです。 HTTPはすべての着信要求を処理し、HTTPSのみを受け入れるように構成されています。 HTTPSはHTTPサーバーによって処理され、要求はPlayに転送されます。

これにより、Playアプリケーション全体が正常に機能し、SSLが別のアプリケーションにオフロードされます。

この同じ方法は、HTTPサーバーではなくロードバランサに適用できますが、企業環境で実行されている場合を除き、大半の人がHTTPサーバーのはるかに安価な代替方法を採用すると思います。

+0

非常に役に立ったと私は複数の方法の検討を感謝します。 – crockpotveggies

12

コントローラでは、request.secureと照合してリダイレクトを行うか、または403/access deniedを返すことができます。

あなたは全体のコントローラがこれを行うために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

+1

herokuを使用している場合、このコードは「Too Many Redirects」を引き起こします。ここから同様のコードを使用してください:http://stackoverflow.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode

関連する問題