Перехватить запрос и проверить авторизацию в playframework

я используюplay framework 2.4.2 с Java, и я хочу проверить, что пользователь вошел в систему, перехватывая все запросы и проверяя, установлено ли значение сеанса. Так что я продлилDefaultHttpRequestHandler и переопределитьcreateAction Способ перехвата всех запросов. Однако я не нашел хорошего способа проверить сессию.

Вариант 1 - Сбой

Когда я пытаюсь получить значение сеанса, я получаю исключение времени выполнения:There is no HTTP Context available from here

Ниже приведен класс, с которым я работаю:

public class RequestHandler extends DefaultHttpRequestHandler {
    @Override
    public Action createAction(Http.Request request, Method method) {
        session("loggedIn"); // Throws runtime Exception: no HTTP Context
    }
}
Вариант 2 - Гадкий

Так как сессия технически является cookie, я могу извлечь значение из заголовка с помощью кода, подобного следующему:

for(String cookie : request.headers().get("Cookie")){
    System.out.println("cookie: "+cookie);
}

Но затем мне нужно проанализировать строку cookie, которая выглядит как следующая строка, чтобы получить значение loggedIn. Чтобы грязно на мой вкус.

_ga=GA1.1.1508004144.1421266376; ki_r=; ki_t=1438789543788%378129908%3B1438789543788%3B1%3B1; PLAY_SESSION=0570411c3eb55ad230681539ddcfaa4220583fd-loggedIn=1
Вариант 3 - Слишком легко забыть аннотацию

Я замечаю, что некоторые сайты документируют другой подход и вместо этого создают
композиция действия и добавьте соответствующую аннотацию к каждому классу контроллера или методу.

Проблема с этим подходом заключается в том, что разработчик должен не забыть добавить аннотацию. Я бы предпочел отменить это, чтобы заблокировать каждый маршрут по умолчанию, а затем добавить аннотацию к маршрутам, которые не нуждаются в проверке.

Пара сайтов, которые документируют состав действий:

http://alexgaribay.com/2014/06/16/authentication-in-play-framework-using-java/https://www.playframework.com/documentation/2.2.1/JavaGuide4Вопрос

Есть ли способ глобальной проверки, если у пользователя должен быть доступ к странице, и как мне получить переменную сеанса?

* Обратите внимание, что я не заинтересован в использовании стороннего плагина для аутентификации.

Ответы на вопрос(1)

Ваш ответ на вопрос