2016-01-07 2 views

ответ

0

Конфигурация цепочки выполнения для запросов в 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; 
        } 
    } 
    

Надеется, что это помогает вам, Тьерри