2017-10-12 2 views
0

Ich versuche, nur einen Play-Filter zu aktivieren, während andere (wie Host-Filterung oder CSRF-Filterung) deaktivieren.Scala Play Framework nur bestimmte Filter aktivieren

Das ist mein application.conf file:

play.http.filters=<filter that I am enabling> 
play.filters.disabled+=play.filters.hosts.AllowedHostsFilter 
play.filters.disabled+=play.filters.csrf.CSRFFilter 

Es scheint so, nachdem ich die Linie play.http.filters=<filter that I am enabling> ganz am Anfang hinzugefügt haben, die deaktivierten Filter wieder aktiviert wurde, wie ich vertraut Fehlermeldungen angezeigt:

Illegal 'x-forwarded-for' header: Invalid input ':', expected listSep or 'EOI' (line 1, column 13) 

Wie kann man bestimmte Filter deaktivieren und bestimmte Filter im scala play Framework aktivieren?

Antwort

1

In Play 2.6 wird das Deaktivieren/Aktivieren von Standardfiltern durch Ändern von application.conf durchgeführt. Um den Standardfilter zu aktivieren, sollte play.filters.enabled hinzugefügt werden. Um den Standardfilter zu deaktivieren, sollten Sie play.filters.disabled hinzufügen.

Ich denke, es gibt hier einige Verwirrung. play.http.filters sollte der vollständig qualifizierte Klassenname der Klasse in Ihrer App sein. Diese Klasse wird für das Aktivieren/Deaktivieren von Filtern zuständig. Hier ist einfaches Beispiel für Filter, die play.filters.enabled/deaktiviert Konfiguration respektiert:

import javax.inject.{Inject, Singleton} 

import play.api.http.DefaultHttpFilters 
import play.api.http.EnabledFilters 
import play.api.mvc.{EssentialAction, EssentialFilter} 

import scala.concurrent.ExecutionContext 

// Our example filter 
@Singleton 
class ExampleFilter @Inject()(implicit ec: ExecutionContext) extends EssentialFilter { 
    override def apply(next: EssentialAction) = EssentialAction { request => 
    next(request).map { result => 
     result.withHeaders("X-ExampleFilter" -> "foo") 
    } 
    } 
} 

// All our filters 
class Filters @Inject()(
    defaultFilters: EnabledFilters, // respect play.filters.enabled and play.filters.disabled 
    exampleFilter: ExampleFilter, // you can pass user-defined filter 
) extends DefaultHttpFilters(defaultFilters.filters: _*) 
+0

Danke. Der einzige Filter, den ich haben möchte, ist jedoch kein Standardfilter, sondern ein Filter aus einer Drittanbieterbibliothek. Es sieht so aus, als würde play.filters.enabled nur für Standard-Play-Filter funktionieren. Wie könnte ich in diesem Fall keinen Standardfilter aktivieren? Vielen Dank – experimenter

0

Im Play 2.6, sollten Sie in der Lage sein play.filters.enabled=[youDesiredFilter] zu tun, wie in der documentation beschrieben.

Nur die Filter in dieser Liste werden aktiviert. Alle Standardfilter sind deaktiviert, wenn sie nicht aufgelistet sind.

Verwandte Themen