Есть ли в Play 2.5.x плагины для захвата Запроса и Ответа для пользовательских целей регистрации? - PullRequest
0 голосов
/ 24 января 2019

Я ищу любые возможные решения / плагины для захвата запросов и ответов, которые приходят через Play 2.5.x для создания пользовательских журналов.

Я нашел https://www.playframework.com/documentation/2.5.x/ScalaHttpFilters для фильтров, однако он не может получить тело запроса. Есть ли способ сделать это?

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

1 Ответ

0 голосов
/ 24 января 2019

Вы можете представить, что Playframework работает с запросом как конвейер.

A filter - это правильное место для регистрации запросов, но, как вы обнаружили, он не имеет доступа к телу .Основная причина этого в том, что на этом этапе тело не анализируется .Фильтр может отклонять несоответствующий запрос только по заголовкам, не нужно тратить ресурсы на анализ тела.Это основная идея фильтров.

Следующий этап в конвейере - это action .Если вам нужно что-то сделать с телом запроса , то вам нужно использовать состав действий .К сожалению, вам нужно обернуть \ заменить каждое действие составным действием.

Документация

https://www.playframework.com/documentation/2.5.x/ScalaActionsComposition

Пример (из документации)

Определение действия регистрации:

def logging[A](action: Action[A])= Action.async(action.parser) { request =>
  Logger.info("Calling action")
  action(request)
}

object LoggingAction extends ActionBuilder[Request] {
  def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
    block(request)
  }
  override def composeAction[A](action: Action[A]) = new Logging(action)
}

Использовать его:

def index = LoggingAction {
  Ok("Hello World")
}

def index = Logging {
  Action {
    Ok("Hello World")
  }
}
...