【问题标题】:Enforce SSL on Play! Framework在 Play 上强制执行 SSL!框架
【发布时间】:2011-10-29 06:52:29
【问题描述】:

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

虽然可以让 HTTP 和 HTTPS 异步服务,但我还没有找到一种简单的方法来强制执行 SSL。有谁用过Play!有执行 SSL 的简单方法吗?不确定我是否需要创建重定向,或者这是否可以在 conf 文件中快速解决。

【问题讨论】:

    标签: java scala playframework netty


    【解决方案1】:

    有几种方法可以强制实施 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 服务器替代方案,除非在公司环境中运行。

    【讨论】:

    • 非常有帮助,感谢您考虑多种方法。
    【解决方案2】:

    在控制器中,您可以检查 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多