Play Framework设置play.http.filters后play.filters.enabled失效问题咨询
Play Framework 2.8.16:自定义Filters后RedirectHttpsFilter被忽略的问题
我正在使用Play Framework 2.8.16版本,在应用中定义了Filters.scala并在application.conf中配置:
play.http.filters = com.xxx.xxx.Filters
同时设置了:
play.filters.enabled += play.filters.https.RedirectHttpsFilter
但RedirectHttpsFilter被忽略了。请问这是预期行为吗?如何同时启用两者?
这是预期行为
当通过play.http.filters指定自定义过滤器类时,Play框架会完全使用该类定义的过滤器链,不再自动加载play.filters.enabled配置项中的过滤器。这是因为自定义过滤器类的优先级更高,会覆盖默认的自动加载逻辑。
解决方法:手动整合过滤器
要同时启用自定义过滤器和RedirectHttpsFilter,需要在你的Filters.scala中手动将RedirectHttpsFilter加入过滤器列表,有两种常见实现方式:
方式一:继承DefaultHttpFilters,显式声明所有过滤器
在自定义Filters类的构造函数中注入需要的过滤器,包括RedirectHttpsFilter和你自己的自定义过滤器,然后传递给父类:
import javax.inject.Inject import play.api.http.DefaultHttpFilters import play.filters.https.RedirectHttpsFilter // 导入你的自定义过滤器 import com.xxx.xxx.CustomFilter class Filters @Inject()( redirectHttpsFilter: RedirectHttpsFilter, customFilter: CustomFilter ) extends DefaultHttpFilters(redirectHttpsFilter, customFilter)
方式二:基于HttpFiltersComponents自动加载配置的过滤器
如果你想保留play.filters.enabled的自动加载能力,同时添加自定义过滤器,可以通过HttpFiltersComponents实现:
import javax.inject.Inject import play.api.http.HttpFilters import play.filters.HttpFiltersComponents // 导入你的自定义过滤器 import com.xxx.xxx.CustomFilter class Filters @Inject()(httpFiltersComponents: HttpFiltersComponents) extends HttpFilters { // 先加载play.filters.enabled中的所有过滤器,再添加自定义过滤器 override val filters = httpFiltersComponents.filters :+ new CustomFilter() }
使用第二种方式时,play.filters.enabled中的过滤器会被自动加载,你只需要在现有过滤器链后追加自己的自定义过滤器即可。
内容的提问来源于stack exchange,提问作者lemy
相关产品推荐
相关产品推荐

