在Play上强制执行SSL! 骨架

我正在使用Play! 1.2.2及其新的Netty客户端框架。

我没有找到一种直接的方法来强制执行SSL,虽然可以让HTTP和HTTPS异步服务。 有没有人与Play合作过! 有一个直接的方法来执行SSL? 不确定我是否需要创建重定向,或者是否可以在conf文件中快速解决此问题。

有几种方法可以强制执行SSL。

首先,您可以将所有操作设置为使用.secure()方法

 index page 

或者,可能最好的方法是通过前端HTTP服务器(如Apache,Nginx或Lighttpd)执行此操作。

前端http服务器的想法是,您的应用程序在端口9000上运行,但无法从外部网络访问。 HTTP负责所有传入请求,并配置为仅接受HTTPS。 HTTPS由HTTP服务器处理,然后请求转发到Play。

这使您的整个Play应用程序正常工作,并将SSL卸载到另一个应用程序。

这种方法可以应用于负载均衡器,而不是HTTP服务器,但我猜测大多数人会选择远远便宜的HTTP服务器,除非在企业环境中运行。

在控制器中,您可以检查request.secure并执行重定向或返回403 /拒绝访问。

您可以为整个控制器强制执行以下操作:

 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