我目前在使用Play! 1.2.2及其新的Netty客戶端框架。強制啓用SSL!框架
雖然可以使HTTP和HTTPS異步服務,但我還沒有找到實施SSL的直接方法。有沒有人與Play一起工作!有一個直接的方法來執行SSL?不知道是否需要創建重定向,或者是否可以在conf
文件中快速解決。
我目前在使用Play! 1.2.2及其新的Netty客戶端框架。強制啓用SSL!框架
雖然可以使HTTP和HTTPS異步服務,但我還沒有找到實施SSL的直接方法。有沒有人與Play一起工作!有一個直接的方法來執行SSL?不知道是否需要創建重定向,或者是否可以在conf
文件中快速解決。
有幾種強制執行SSL的方法。
首先,你可以設置你所有的行動,使用.secure()
方法,例如
<a href="@{Application.index.secure()}">index page</a>
或者,也可能是最好的辦法,就是通過前端HTTP服務器要做到這一點,比如Apache,Nginx的或Lighttpd。
前端http服務器的想法是,您的應用程序運行在端口9000上,但不能從外部網絡訪問。 HTTP負責所有傳入的請求,並被配置爲只接受HTTPS。 HTTP服務器處理HTTPS,然後將請求轉發到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
如果使用heroku,此代碼將導致「太多重定向」。使用這裏的類似代碼:http://stackoverflow.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode
非常有幫助,我讚賞多種方法的考慮。 – crockpotveggies