2011-08-17 15 views
21

Attualmente sto usando Play! 1.2.2 e il suo nuovo framework per client Netty.Attiva SSL su Play! Framework

Non ho trovato un metodo diretto per applicare SSL, sebbene possa far funzionare HTTP e HTTPS in modo asincrono. Qualcuno che ha lavorato con Play! avere un metodo diretto per far rispettare SSL? Non sono sicuro se ho bisogno di creare reindirizzamenti o se questo può essere risolto rapidamente in un file conf.

risposta

22

Ci sono un paio di modi per applicare SSL.

In primo luogo, è possibile impostare tutte le vostre azioni di utilizzare il metodo .secure(), ad esempio

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

In alternativa, e probabilmente il modo migliore, è quello di farlo attraverso un server di frontend HTTP, come Apache, Nginx o Lighttpd.

L'idea del server http di frontend è che l'applicazione venga eseguita sulla porta 9000, ma non è accessibile dalla rete esterna. HTTP è responsabile di tutte le richieste in arrivo ed è configurato per accettare solo HTTPS. L'HTTPS viene gestito dal server HTTP e la richiesta viene quindi inoltrata a Play.

Questo lascia l'intera applicazione Play a funzionare normalmente e SSL viene scaricato in un'altra applicazione.

Questo stesso metodo può essere applicato a un servizio di bilanciamento del carico, piuttosto che a un server HTTP, ma suppongo che la maggior parte delle persone utilizzi l'alternativa molto più economica di un server HTTP, a meno che non sia in esecuzione in un ambiente aziendale.

+0

Molto disponibile e Apprezzo la considerazione di più metodi. – crockpotveggies

12

Nel controller è possibile verificare con request.secure e effettuare un reindirizzamento o restituire 403/accesso negato.

È possibile forzare SSL per un intero controllore facendo questo:

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

... e annotare un altro controllore:

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

Vedi anchehttp://groups.google.com/group/play-framework/browse_thread/thread/7b9aa36be85d0f7b

+1

Se si utilizza heroku, questo codice causerà "Troppi reindirizzamenti". Usa il codice simile da qui: http://stackoverflow.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode