package filters;
import akka.stream.Materializer;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
import java.util.function.Function;
import javax.inject.*;
import play.mvc.*;
import play.mvc.Http.RequestHeader;
/**
* This is a simple filter that adds a header to all requests. It's
* added to the application's list of filters by the
* {@link Filters} class.
*/
@Singleton
public class ExampleFilter extends Filter {
private final Executor exec;
/**
* @param mat This object is needed to handle streaming of requests
* and responses.
* @param exec This class is needed to execute code asynchronously.
* It is used below by the thenAsyncApply method.
*/
@Inject
public ExampleFilter(Materializer mat, Executor exec) {
super(mat);
this.exec = exec;
}
@Override
public CompletionStage apply(
Function> next,
RequestHeader requestHeader) {
return next.apply(requestHeader).thenApplyAsync(
result -> result.withHeader("X-ExampleFilter", "foo"),
exec
);
}
}