Как связать фильтр с сервлетом в app.yaml для Google App Engine?

Для своего приложения для ядра приложения я хочу назначить сервлет для шаблона URL, но также настроить фильтр Objectify, как описано здесь: https://code.google.com/p/objectify-appengine/wiki/Setup.

В моем app.yaml у меня есть

handlers:
  - url: /v1/*
    name: v1
    servlet: org.restlet.ext.servlet.ServerServlet
    ...etc...

который просто перенаправляет запросы к моему сервлету, но я не могу понять, как организовать фильтр Objectify для тех же запросов, которые обрабатывает сервлет.

Документы GAE гласят: "Фильтр - это класс, который действует на запрос как сервлет, но может позволить продолжить обработку запроса с другими фильтрами или сервлетами".

Хорошо, хорошо, это то, что я хочу. Но в документах также говорится: "Одно отображение URL может включать в себя либо фильтр, либо сервлет, но не оба".

Итак... как мне это сделать?

1 ответ

Решение

Фильтры запускаются перед сервлетами и не являются эксклюзивными. Обычно для запроса запускаются все фильтры, а затем выбирается и выполняется один сервлет для данного URL.

Создайте новый раздел фильтра в вашем yaml:

handlers:
  - url: /v1/*
    name: v1
    servlet: org.restlet.ext.servlet.ServerServlet
  - url: /*    
    name: ObjectifyFilter
    filter: com.googlecode.objectify.ObjectifyFilter

Примечание: лучше всего запускать ObjectifyFilter для всех запросов (url: /*) просто чтобы быть уверенным, что objectify всегда инициализируется.

Другие вопросы по тегам