2017-10-12 3 views
0

J'essaie d'activer un seul filtre Lecture, tout en désactivant d'autres (comme le filtrage hôte ou le filtrage CSRF).L'environnement Scala Play n'autorise que certains filtres

Ceci est mon 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 

Il semble que après que je l'ai ajouté la ligne play.http.filters=<filter that I am enabling> au début, les filtres désactivés se sont réactivées, comme je vois des messages d'erreur familiers:

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

Quelle est la manière correcte de désactiver certains filtres et d'activer certains filtres dans la structure scala play?

Répondre

1

En lecture 2.6, la désactivation/activation des filtres par défaut est effectuée par changig application.conf. Pour activer le filtre par défaut, vous devez ajouter play.filters.enabled. Pour désactiver le filtre par défaut, vous devez ajouter play.filters.disabled.

Je pense qu'il y a une certaine confusion ici. play.http.filters doit être le nom complet de la classe de votre application. Cette classe devient responsable de l'activation/désactivation des filtres. Voici exemple simple de filtre qui respecte la configuration play.filters.enabled/handicapés:

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

Merci. Cependant, le seul filtre que je voudrais avoir n'est pas un filtre par défaut, mais un filtre provenant d'une bibliothèque tierce. Il semble que play.filters.enabled ne fonctionne que pour les filtres de lecture par défaut. Dans ce cas, comment puis-je activer un filtre par défaut? Je vous remercie – experimenter

0

En jeu 2.6, vous devriez être en mesure de faire play.filters.enabled=[youDesiredFilter] comme décrit dans le documentation.

Seuls les filtres de cette liste seront activés. Tous les filtres par défaut seront désactivés s'ils ne sont pas répertoriés.