Используйте SSL на Play!Фреймворк - PullRequest
21 голосов
/ 18 августа 2011

Я сейчас использую Play! 1.2.2 и его новая клиентская среда Netty.

Я не нашел простого метода принудительного применения SSL, хотя могу заставить HTTP и HTTPS работать асинхронно. Кто-нибудь, кто работал с Play! есть простой способ применения SSL? Не уверен, нужно ли мне создавать перенаправления или это можно быстро решить в файле conf.

Ответы [ 2 ]

22 голосов
/ 18 августа 2011

Существует несколько способов применения 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, если только они не работают в корпоративной среде.

12 голосов
/ 23 января 2012

В контроллере вы можете проверить на 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

...