Как применить глобальный фильтр в playframework - PullRequest
10 голосов
/ 07 января 2011

При использовании @before он используется только в одном классе.Как применить глобальный фильтр в playframework?Так что один фильтр используется для всех классов контроллеров.

Ответы [ 4 ]

6 голосов
/ 07 января 2011

Простым решением является расширение базового контроллера для всех ваших контроллеров и включение @Before в базовый контроллер.

Другим вариантом (и лучшим решением, поскольку он более гибкий) является использование аннотации @With. Пример игровой документации:

Пример:

public class Secure extends Controller {

    @Before
    static void checkAuthenticated() {
        if(!session.containsKey("user")) {
            unAuthorized();
        }
    }
}    

и на другом контроллере:

@With(Secure.class)
public class Admin extends Application {

    ...

}

Это означает, что контроллер администратора будет обрабатывать все перехватчики (@Before, @After, @Finally), содержащиеся в контроллере Secure.

2 голосов
/ 08 сентября 2012

Я сделал это, обрабатывая входящие запросы глобально в классе GlobalSettings:

Это описывает класс: http://www.playframework.org/documentation/2.0/JavaGlobal

Здесь описывается метод, который вы хотите переопределить. http://www.playframework.org/documentation/2.0/JavaInterceptors

Вот пример того, как я использовал его в своем собственном проекте (конечно, это упрощенная версия того, что вы ищете):

@Override
public play.mvc.Action onRequest(play.mvc.Http.Request request, java.lang.reflect.Method method) {
    if (request.path().startsWith("/secret/locked")) {
        return new Action.Simple() {
            @Override
            public Result call(play.mvc.Http.Context ctx) throws Throwable {
                return redirect(routes.Application.forbidden());
            }
        };
    }

    return super.onRequest(request, method);
}
1 голос
/ 10 января 2011

Вы можете просто использовать PlayPlugin для этой проблемы.Подробнее см. здесь .

0 голосов
/ 25 июля 2014

Неправильное решение расширить базовый контроллер для всех ваших контроллеров и иметь @Before в базовом контроллере.

Вы можете расширить фильтр или класс essensialfilter .eg

classfilter1 расширяет Filter {}

и применяет filter1 к Global

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...