You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:02:12