使用Play框架,我想对传入的请求应用不同的策略,以允许外部html +脚本在我的网站上运行。对于为您提供自己的html +脚本内容,供用户进行交互以及必须通过原始网站提供的第三方集成,这是必需的。
应根据某些条件(主要是子域)定义策略。在过滤器规范中,只有一个全局play.filters.headers.contentSecurityPolicy
影响整个站点。但我不想放松它。对某些特定要求
我thirdparty.website.com
上的website.com
应该获得宽松政策甚至根本没有政策,但剩下的网站应该继续采取紧缩政策。
我感谢任何想法或帮助。
答案 0 :(得分:1)
如果有人需要,这是一个工作示例。 (感谢@mkurz指针)
非常简单,如果主机和路径条件都满足,则会在此处复制SecurityHeadersFilter apply并跳过安全标头。如果不是,则保留原始行为。
func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat
{
return self.view.bounds.width / x
}
另外,将过滤器添加到class ConditionalSecurityHeadersFilter @Inject() (implicit config: SecurityHeadersConfig) extends SecurityHeadersFilter(config) {
override def apply (next: EssentialAction) = EssentialAction { req =>
val HostPattern: Regex = "..some regex..".r
val PathsToBypass: List[String] = [...]
import play.api.libs.iteratee.Execution.Implicits.trampoline
req.host.toLowerCase match {
case HostPattern(...) =>
if (PathsToBypass.map{path =>
path.r.findFirstIn(req.path)
}.count { p => p.isDefined } > 0)
next(req)
else
next(req).map(_.withHeaders(headers(req): _*))
case _ => next(req).map(_.withHeaders(headers(req): _*))
}
}
}
Filters