2017-02-14 13 views
0

В the official document, Я видел этот фильтр регистрации.Простой регистрационный фильтр для воспроизведения

import java.util.concurrent.CompletionStage; import java.util.function.Function; import javax.inject.Inject; import akka.stream.Materializer; import play.Logger; import play.mvc.*; 

public class LoggingFilter extends Filter { 

    @Inject 
    public LoggingFilter(Materializer mat) { 
     super(mat); 
    } 

    @Override 
    public CompletionStage<Result> apply(
      Function<Http.RequestHeader, CompletionStage<Result>> nextFilter, 
      Http.RequestHeader requestHeader) { 
     long startTime = System.currentTimeMillis(); 
     return nextFilter.apply(requestHeader).thenApply(result -> { 
      long endTime = System.currentTimeMillis(); 
      long requestTime = endTime - startTime; 

      Logger.info("{} {} took {}ms and returned {}", 
       requestHeader.method(), requestHeader.uri(), requestTime, result.status()); 

      return result.withHeader("Request-Time", "" + requestTime); 
     }); 
    } } 

Хотя это основной вопрос, не нужно ли настраивать какие-либо настройки для этого фильтра? После создания этого класса фильтра в PlayApplication этот фильтр будет применим ко всем запросам?

Во-вторых, они объясняют, что nextFilter является следующим действием. Однако, похоже, здесь нет никаких настроек. Итак, в этом случае, какое действие будет выполнено?

Может ли кто-нибудь объяснить?

ответ

0

Просто создайте в корневом пакете класс Filters, расширяющий DefaultHttpFilters и передайте свой фильтр конструктору varargs. Play автоматически просмотрит этот класс Filters, чтобы найти фильтры, которые вы создали. Ваш фильтр будет доступен для всех запросов.

import play.http.DefaultHttpFilters; 
import javax.inject.Inject; 

public class Filters extends DefaultHttpFilters { 
    @Inject 
    public Filters(LoggingFilter logging) { 
    super(logging); 
    } 
} 

Вы можете определить и применить несколько фильтров:

public class Filters extends DefaultHttpFilters { 
    @Inject 
    public Filters(GzipFilter gzip, LoggingFilter logging) { 
    super(gzip, logging); 
    } 
} 

В этом случае параметр nextFilter представляет следующее действие в цепочке фильтров.

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

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