2017-02-02 11 views
0

У меня есть фильтр (закодированный на Java), который обрабатывает каждый HTTP-запрос, сделанный в моем приложении. Я хочу, чтобы этот фильтр посмотрел на значение конкретного заголовка и на основе этого значения отбросил (то есть, в конечном итоге, ошибку 404) этот текущий HTTP-запрос.Как отбросить HTTP-запросы в Java-Play! фильтр?

Возможно ли это в Play?

Спасибо,

+1

Добро пожаловать на переполнение стека! Мы являемся сайтом «вопрос-ответ», а не услугой «Кодеры для найма». Пожалуйста, объясните, что вы пробовали до сих пор, и почему это не сработало. Смотрите: [Почему «Кто-нибудь может мне помочь?» не вопрос?] (http://meta.stackoverflow.com/q/284236) –

ответ

1

Это довольно прямолинейно. Прежде всего, прочитайте и поймите раздел об фильтрах в documentation.

Реализация вашего фильтра будет выглядеть следующим образом:

import akka.stream.Materializer; 
import play.mvc.Filter; 
import play.mvc.Http; 

public class HeaderFilter extends Filter { 
    @Inject 
    public HeaderFilter(final Materializer mat) { 
     super(mat); 
    } 

    @Override 
    public CompletionStage<Result> apply(final Function<Http.RequestHeader, CompletionStage<Result>> next, 
             final Http.RequestHeader requestHeader) { 
     final String header = requestHeader.getHeader("header name"); 
     if (some test) { 
      // allow the request to continue 
      return next.apply(requestHeader); 
     } else { 
      // block the request 
      return CompletableFuture.completedFuture(Results.notFound()); 
     } 
    } 
}