Play Framework 2.5.12 - установить несколько фильтров в application.conf - PullRequest
0 голосов
/ 13 октября 2018

Я использую Play Framework 2.5.12 (версия Java).Когда я объявляю фильтр (Filters1) и задаю ниже config в application.conf:

 play.http.filters = my.filter.path.Filters1

Он отлично работает.

Но у меня есть два фильтра:

  1. Filters1 расширяет класс DefaultHttpFilters
  2. Filters2 расширяет класс фильтров

В Play Framework 2.6 решение:

play.http.filters += my.filter.path.Filters1
play.http.filters += my.filter.path.Filters2

Я пробовал, но это не такне работает в Play Framework 2.5.Каково ваше решение?

1 Ответ

0 голосов
/ 15 октября 2018

Наконец-то я не смог справиться с этой проблемой в application.conf.
Решение:
Вы должны передать свой фильтр в качестве параметра в конструктор Filters1 и установить его как EssentialFilters.
Это мой класс Filters1:

import com.rh.ot.web.core.filters.CustomFilter;
import play.Environment;
import play.filters.gzip.GzipFilter;
import play.filters.headers.SecurityHeadersFilter;
import play.http.DefaultHttpFilters;
import play.mvc.EssentialFilter;
import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
public class Filters1 extends DefaultHttpFilters {

    private final Environment env;
    private EssentialFilter[] filters;

    @Inject
    public Filters(Environment env, GzipFilter gzipFilter, SecurityHeadersFilter securityHeadersFilter, Filters2 filters2) {
        super(securityHeadersFilter);
        this.env = env;
        filters = new EssentialFilter[]{gzipFilter.asJava(), filters2.asJava()};
    }

    public EssentialFilter[] filters() {
        return filters;
    }
}

и класс Filters2:

import akka.util.ByteString;
import play.libs.streams.Accumulator;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.mvc.Result;
import javax.inject.Inject;
import java.util.concurrent.Executor;

public class Filters2 extends EssentialFilter {

    private final Executor executor;

    @Inject
    public Filters2(Executor executor) {
        super();
        this.executor = executor;
    }

    @Override
    public EssentialAction apply(EssentialAction next) {
        return EssentialAction.of(request -> {
            request.headers().put("Strict-Transport-Security", new String[]{"max-age=31536000; includeSubDomains"});
            Accumulator<ByteString, Result> accumulator = next.apply(request);
            return accumulator.map(result -> result, executor);
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...