Yürütme 2.3'te, farklı filtrelere göre farklı istek yollarını veya yöntemlerini devre dışı bırakabilirim. Ancak, Play 2.4'te bunu yapmanın bir yolunu bulamıyorum. https://www.playframework.com/documentation/2.4.x/ScalaHttpFilters. Play 2.4 HttpFilters uygulamasında nasıl benzer sonuçlara ulaşabilirim?Oynat 2.4 İstek yoluna ya da yöntemine göre ayarlanmış belirli filtreleri devre dışı bırakma
Oyun 2.3'te bunu nasıl yaptım. Play HttpFilters mevcut hiçbir RequestHeader yoktur
object CacheCtrlHeadersFilter extends EssentialFilter {
def apply(action: EssentialAction) = new EssentialAction {
def apply(requestHeader: RequestHeader) = {
action(requestHeader).map { result =>
result.withHeaders(
CACHE_CONTROL -> "no-cache, no-store, must-revalidate, private",
PRAGMA -> "no-cache"
)
}
}
}
}
import play.api.libs.iteratee._
object FilterChainByRequestHeader {
def apply[A](action: EssentialAction, filtersFun: (RequestHeader) => List[EssentialFilter]): EssentialAction = new EssentialAction {
def apply(rh: RequestHeader): Iteratee[Array[Byte], Result] = {
val chain = filtersFun(rh).reverse.foldLeft(action) { (a, i) => i(a) }
chain(rh)
}
}
}
object Global extends GlobalSettings {
val securityFilter = SecurityHeadersFilter()
val defaultFilters = List(securityFilter,
CacheCtrlHeadersFilter)
def filters(rh: RequestHeader) = {
if (rh.method == "OPTIONS") <----------- by method
defaultFilters.filterNot(_.eq(securityFilter))
else if (rh.path.startsWith("/apps/google")) <----------- by path
defaultFilters.filterNot(_.eq(securityFilter))
else defaultFilters
}
override def doFilter(a: EssentialAction): EssentialAction = {
FilterChainByRequestHeader(super.doFilter(a), filters)
}
}
2,4
class Filters @Inject() (
securityHeadersFilter: SecurityHeadersFilter,
cacheCtrlHeadersFilter: CacheCtrlHeadersFilter
) extends HttpFilters {
val filters = Seq(securityHeadersFilter, cacheCtrlHeadersFilter)
}
Sadece bir düşünce, ama belki de filtreyi genişletebilir ve mantığı orada kurabilirsiniz? – gpgekko
@gpgekko Evet, bunu düşündüm. Ama acaba bu tek çözüm mü? – angelokh
@gpgekko Ayrıca, bir filtre oluşturursam, geçerli filtreyi uygulama işlevinin içinden nasıl atlayabilirim? – angelokh