In Play 2.3 kann ich bestimmte Filter basierend auf unterschiedlichen Anforderungswegen oder Methoden deaktivieren. Ich finde jedoch keinen Weg, dies in Play 2.4 zu tun. https://www.playframework.com/documentation/2.4.x/ScalaHttpFilters. Wie erreiche ich ein ähnliches Ergebnis in Play 2.4 HttpFilters?Abspielen 2.4 bestimmte Filter deaktivieren, die auf Anforderungspfad oder Methode festgelegt sind
Hier ist, wie ich es in Play 2.3 gemacht habe.
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)
}
}
Es gibt keine Request in HttpFilters im Play 2,4
class Filters @Inject() (
securityHeadersFilter: SecurityHeadersFilter,
cacheCtrlHeadersFilter: CacheCtrlHeadersFilter
) extends HttpFilters {
val filters = Seq(securityHeadersFilter, cacheCtrlHeadersFilter)
}
Nur ein Gedanke, aber vielleicht können Sie den Filter erweitern und die Logik dort einbauen? – gpgekko
@gpgekko Ja, ich habe darüber nachgedacht. Aber ich frage mich, ob dies die einzige Lösung ist. – angelokh
@gpgekko Wie kann ich den aktuellen Filter in der Anwendungsfunktion überspringen, wenn ich einen Filter erstelle? – angelokh