2017-10-12 72 views
0

我試圖只啓用一個Play過濾器,同時禁用其他過濾器(如主機過濾或CSRF過濾)。Scala Play框架只啓用某些過濾器

這是我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 

好像我已經添加了線play.http.filters=<filter that I am enabling>在一開始後,禁用過濾器再次得到啓用,因爲我看到了類似的錯誤信息:

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

禁用某些過濾器並在scala play框架中啓用某些過濾器的正確方法是什麼?

回答

1

在play 2.6中,禁用/啓用默認過濾器由changig application.conf完成。要啓用默認過濾器,應該添加play.filters.enabled。要禁用默認過濾器,您應該添加play.filters.disabled

我認爲這裏有一些困惑。 play.http.filters應該是您的應用中該類的完全限定類名稱。這個類負責啓用/禁用過濾器。這裏是誰尊重play.filters.enabled /禁用配置過濾器的簡單的例子:

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

謝謝。但是,我想要的唯一過濾器不是默認過濾器,而是來自第三方庫的過濾器。它看起來像play.filters.enabled只適用於默認播放過濾器。在這種情況下,我怎麼能啓用一個默認的過濾器?謝謝 – experimenter

0

在玩2.6,你應該能夠做到play.filters.enabled=[youDesiredFilter]documentation描述。

只有該列表中的過濾器纔會啓用。如果沒有列出所有默認過濾器,它們將被禁用。