У меня есть два требованияКак создать Глобальный и Pre/Post согласования фильтра в Restlet
- Необходимо создать один фильтр, который должен быть применен перед каждым и каждым ресурсом.
- Необходимо создать два фильтра Pre и Post Same as Jersey.
У меня есть два требованияКак создать Глобальный и Pre/Post согласования фильтра в Restlet
Конфигурация цепочки выполнения для запросов в Restlet очень гибкая.
Для создания глобального фильтра для всех серверов ресурсов, вы можете просто добавить фильтр перед вашим маршрутизатором в вашей Restlet приложения:
public class MyApplication extends Application {
public Restlet createInboundRoot() {
Router router = new Router(getContext());
(...)
router.attach("/test", TestServerResource.class);
router.attach("/", RootServerResource.class);
return new MyFilter(getContext(), router);
}
}
Содержание этого фильтра может быть что-то подобное :
public class MyGlobalFilter extends Filter {
public MyGlobalFilter(Context context, Restlet next) {
super(context, next);
}
(...)
@Override
protected void afterHandle(Request request, Response response) {
(...)
}
@Override
protected int beforeHandle(Request request, Response response) {
(...)
}
}
Что касается до и после фильтров в Restlet, просто реализуют соответственно beforeHandle
и afterHandle
м это в вашем классе фильтров.
public class MyGlobalFilter extends Filter {
(...)
@Override
protected void afterHandle(Request request, Response response) {
(...)
}
@Override
protected int beforeHandle(Request request, Response response) {
(...)
}
}
Для применения таких фильтров в Restlet нет соответствующих аннотаций. Вам необходимо добавить их при определении цепочки выполнения (маршрутизации) в методе createInboundRoot
вашего класса приложения. Вы можете заметить, что вспомогательные маршрутизаторы могут использоваться только для применения фильтра на подмножестве ресурсов сервера.
public class MyApplication extends Application {
public Restlet createInboundRoot() {
Router rootRouter = new Router(getContext());
(...)
Router subRouter = new Router(getContext());
subRouter.attach("", TestsServerResource.class);
subRouter.attach("{id}", TestServerResource.class);
MyFilter myFilter = new MyFilter(getContext(), subRouter);
rootRouter.attach("/test", myFilter)
.setMatchingMode(Template.MODE_STARTS_WITH);
return rootRouter;
}
}
Надеется, что это помогает вам, Тьерри