强制启用SSL!框架
我目前在使用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://*.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode
非常有帮助,我赞赏多种方法的考虑。 – crockpotveggies