При использовании метода @перед этим он используется только в одном классе. Как применить глобальный фильтр в playframework? Так что один фильтр используется для всех классов контроллеров.
Как применить глобальный фильтр в playframework
Ответ 1
Простое решение состоит в том, чтобы расширить базовый контроллер для всех ваших контроллеров и иметь @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
Я сделал именно это, обработав входящие запросы глобально в классе 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);
}
Ответ 3
Вы можете просто использовать PlayPlugin для этой проблемы. Подробнее см. здесь.
Ответ 4
Это нехорошее решение для расширения базового контроллера для всех ваших контроллеров и имеет @Before в базовом контроллере.
Вы можете расширять фильтр или фильтр essensialfeter.e.g.
class filter1 extends Filter {}
и примените filter1 к Global