Scalatra: перенос фильтров из Джерси на Scalatra

Я начинаю копаться в Scalatra, но у меня есть большой опыт в Джерси. Одна из вещей, с которыми я борюсь, - это как получить несколько фильтров для контроллера в Scalatra? Например, у меня есть три уникальных фильтра:

  1. CSRF
  2. XSS
  3. Аутентификация

Некоторым из моих контроллеров потребуется только 2 и 3, всем — 1, а другим — только 3. В будущем у меня может быть больше фильтров. Я понимаю методы before() и after(), но они, кажется, не помогают с цепочкой, к которой я привык с Джерси. Может ли кто-нибудь помочь пролить свет на то, что я должен искать?


person John S    schedule 30.12.2014    source источник
comment
Соответствуют ли ваши маршруты требованиям? Например, все ли те, которым требуется только фильтр 3, следуют аналогичному шаблону маршрутизации (например, /foo/bar/* или аналогичному)?   -  person sberry    schedule 30.12.2014
comment
Да и нет, но ваш ответ ниже на самом деле работает лучше. Я всегда ненавидел смотреть в файл web.xml, чтобы выяснить, какой фильтр был применен к какому контроллеру, мне гораздо больше нравятся фильтры before() для удобочитаемости.   -  person John S    schedule 31.12.2014


Ответы (1)


Если у вас есть четко определенные маршруты, которые имеют общий шаблон в зависимости от того, что вы хотите сделать, вы можете сделать

def before("/pattern1/*") {
    CSRF
}

def before("/pattern2/*") {
    XSS
    CSRF
}

def before("/pattern*") {
    Authenticate
}

И так далее.

person sberry    schedule 30.12.2014
comment
Ах, я не понимал, что у вас может быть несколько шаблонов before() и after(), что на самом деле очень помогает. Глупо с моей стороны пропустить это, учитывая, что у вас могут быть другие маршруты для одного и того же типа HTTP... Спасибо, это немного помогает! - person John S; 31.12.2014
comment
Без проблем. Помогает то, что я работаю с Россом Бейкером и получил подтверждение от него (github.com/rossabaker) :) - person sberry; 31.12.2014