我目前正在使用Play! 1.2.2和其新的Netty客户端框架。
虽然我可以异步地获取HTTP和HTTPS,但我还没有找到一个简单的方法来强制执行SSL。有没有任何使用过Play!的人知道一个简单的强制执行SSL的方法?我不确定是否需要创建重定向,或者这是否可以在conf
文件中迅速解决。
我目前正在使用Play! 1.2.2和其新的Netty客户端框架。
虽然我可以异步地获取HTTP和HTTPS,但我还没有找到一个简单的方法来强制执行SSL。有没有任何使用过Play!的人知道一个简单的强制执行SSL的方法?我不确定是否需要创建重定向,或者这是否可以在conf
文件中迅速解决。
有几种方法可以强制使用SSL。
首先,您可以将所有操作设置为使用.secure()
方法,例如:
<a href="@{Application.index.secure()}">index page</a>
或者,也可能是最好的方法,是通过前端HTTP服务器(如Apache、Nginx或Lighttpd)完成此操作。
前端HTTP服务器的基本思想是:您的应用程序在9000端口运行,但不可从外部网络访问。所有传入请求由HTTP处理,并配置为仅接受HTTPS。 HTTPS由HTTP服务器处理,然后将请求转发给Play。
这样可以使您的整个Play应用程序正常工作,而SSL则被卸载到另一个应用程序中。
这种方法也可以应用于负载均衡器,而不是HTTP服务器,但我猜大多数人会选择更便宜的HTTP服务器,除非在企业环境中运行。
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