Filter Play Framework 2.5.12-在application.conf中设置多个过滤器
我正在使用PlayFramework2.5.12(Java版本)。 当我在application.conf中声明一个过滤器(Filters1)并在下面的config中设置时: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
play.http.filters = my.filter.path.Filters1
它很好用
但我有两个过滤器:
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),而且似乎没有办法注入日志过滤器。通过添加日志过滤器,您的方法立即生效。