Filter Play Framework 2.5.12-在application.conf中设置多个过滤器

Filter Play Framework 2.5.12-在application.conf中设置多个过滤器,filter,playframework-2.5,Filter,Playframework 2.5,我正在使用PlayFramework2.5.12(Java版本)。 当我在application.conf中声明一个过滤器(Filters1)并在下面的config中设置时: play.http.filters = my.filter.path.Filters1 它很好用 但我有两个过滤器: Filters1扩展了DefaultHttpFilters类 Filters2扩展了过滤器类 在Play Framework 2.6中,解决方案是: play.http.filters += my.fi

我正在使用PlayFramework2.5.12(Java版本)。 当我在application.conf中声明一个过滤器(Filters1)并在下面的config中设置时:

 play.http.filters = my.filter.path.Filters1
它很好用

但我有两个过滤器:

  • Filters1扩展了DefaultHttpFilters类
  • Filters2扩展了过滤器类
  • 在Play Framework 2.6中,解决方案是:

    play.http.filters += my.filter.path.Filters1
    play.http.filters += my.filter.path.Filters2
    
    我已经试过了,但在Play Framework 2.5中不起作用。
    您的解决方案是什么?

    最后,我无法在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;
        }
    }
    
    和过滤器2类:

    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);
            });
        }
    }
    
    导入akka.util.ByteString;
    导入play.libs.streams.acculator;
    导入play.mvc.essentialition;
    导入play.mvc.EssentialFilter;
    导入play.mvc.Result;
    导入javax.inject.inject;
    导入java.util.concurrent.Executor;
    公共类过滤器2扩展了EssentialFilter{
    私人最终执行人;
    @注入
    公共过滤器2(执行器执行器){
    超级();
    this.executor=执行人;
    }
    @凌驾
    公共要素申请(要素下一步){
    返回必要的(请求->{
    request.headers().put(“严格传输安全”,新字符串[]{“max age=31536000;includeSubDomains”});
    累加器累加器=下一个。应用(请求);
    返回累加器.map(结果->结果,执行器);
    });
    }
    }
    
    我正在迁移一个Play 2.4项目,在该项目中,日志过滤器在Global中连接到Play 2.5(当然至少连接到2.7),而且似乎没有办法注入日志过滤器。通过添加日志过滤器,您的方法立即生效。