2011-08-17 24 views
21

Şu anda Play kullanıyorum! 1.2.2 ve yeni Netty müşteri çerçevesi.Oyunda SSL'yi Zorla! Çerçeve

SSL'yi zorlamak için HTTP ve HTTPS'yi eşzamansız olarak hizmet vermesine rağmen, doğrudan bir yöntem bulamadım. Play ile çalışan herkes var mı? SSL'yi uygulamak için basit bir yöntem var mı? Yönlendirmeler oluşturmam gerekiyorsa veya bu bir conf dosyasında hızlıca çözülebiliyorsa emin değilim.

cevap

22

SSL'yi uygulamak için birkaç yol vardır.

Öncelikle,

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

Alternatif örneğin .secure() yöntemi kullanmak tüm eylemlerinizi ayarlayabilir ve muhtemelen en iyi yolu, bu tür Apache, Nginx gibi bir ön uç HTTP sunucusu üzerinden bu yapmaktır veya Lighttpd.

Frontend http sunucusu fikri, uygulamanızın port 9000 üzerinde çalışması, ancak dış ağdan erişilememesidir. HTTP tüm gelen isteklerden sorumludur ve yalnızca HTTPS'yi kabul edecek şekilde yapılandırılmıştır. HTTPS HTTP sunucusu tarafından işlenir ve istek daha sonra Oynat'a iletilir.

Bu, tüm Çalma uygulamanızın normal çalışmasını sağlar ve SSL başka bir uygulamaya aktarılır.

Aynı yöntem, HTTP sunucusu yerine bir yük dengeleyiciye uygulanabilir, ancak bir şirket ortamında çalışmadığı sürece, insanların çoğunun bir HTTP sunucusunun çok daha ucuz bir alternatifiyle gideceğini tahmin ediyorum.

+0

Çok yararlı ve Birden çok yöntemin önemini takdir ediyorum. – crockpotveggies

12

Denetleyicide, request.secure karşı kontrol edebilir ve bir yönlendirme yapabilir veya 403/erişim reddedildi.

Hepsinin bir kontrolör bunu için SSL zorlayabilirsiniz:

public static class ForceSSL extends Controller 
{ 
    @Before 
    static void verifySSL() 
    { 
     if (request.secure == false) 
      redirect("https://" + request.host + request.url); 
    } 
} 

... ve başka denetleyici açıklama:

@With(ForceSSL.class) 
public class Foo extends Controller 
{ 
.... 
} 

Ayrıca bkzhttp://groups.google.com/group/play-framework/browse_thread/thread/7b9aa36be85d0f7b

+1

Heroku kullanılıyorsa, bu kod "Çok Fazla Yönlendirme" ye neden olacaktır. Buradan benzer kodu kullanın: http://stackoverflow.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode