2013-02-28 1 views
3

Я бы хотел добавить фильтр (для каждого метода/глобального) к запросам, который просто отклоняет (страницу 404/403) любой запрос, который не имеет определенного параметра URL ,Как отфильтровать запросы на код доступа в Play 2.1

Я знаю, что у Play есть один-два механизма для этого (например, зарегистрироваться на Global.onRouteRequest()), поэтому не просто отправьте мне ссылку на документацию, если она не содержит образец кода, который охватывает этот вопрос. Я пытался играть с API, но немного застрял.

+0

Java или Scala? –

+0

@JulienLafont - извините, scala. – ripper234

ответ

4

Это вы имеете в виду?

object Global extends WithFilters(AccessCheck) 

object AccessCheck extends Filter with Results { 

    override def apply(next:RequestHeader => Result)(request:RequestHeader):Result = 
    request 
     .getQueryString("myCheck") 
     .map(myCheck => next(request)) 
     .getOrElse(Forbidden) 
} 

http://www.playframework.com/documentation/2.1.0/ScalaInterceptors

+0

Кажется, что правильно, спасибо. – ripper234

0

Если вы просто пытаетесь сделать некоторые повторно используемый код, чтобы фильтровать запросы на конкретные действия, которые вы мой хотите попробовать создания EssentialAction, как это. Это называется композицией действия. Это будет выглядеть так, как вы описали. В документах есть дополнительная информация: http://www.playframework.com/documentation/2.1.1/ScalaActionsComposition

Обратите внимание, что вы можете сделать это и в Play 2.0.X, но EssentialAction не существует, вместо этого вы используете Action, и есть только немного больше синтаксиса.

def RequireMyCheck(action: => EssentialAction): EssentialAction = { 
    EssentialAction { request => 
    request 
     .getQueryString("myCheck") 
     .map(myCheck => action()(request)) 
     .getOrElse(Forbidden) 
    } 
} 

Вы можете использовать его как это:

def index = RequireMyCheck { 
    Action { request => 
    Ok("Hello") 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^