![](/img/trans.png)
[英]How would I implement an Interceptor/Filter in play framework 2.4.3 (Scala)
[英]How to run filter on demand scala play framework
我正在開發具有播放框架功能的Scala應用程序,我創建了一個過濾器來過濾來自外部服務器的每個請求,但是現在我堅持如何自兩天以來按需運行過濾器,我擁有80個API 30他們中的一些需要運行特定的過濾器,而這樣的請求我如何讀取請求路由模板
GET /api/v1/:locale/:uuid core.controllers.MyClass.myAction1(locale: String)
GET /api/v1/:locale/:uuid/MyRoute core.controllers.MyClass.myAction2(locale: String)
GET /api/v1/:locale/:uuid/Foo core.controllers.MyClass.myAction3(locale: String)
GET /api/v1/:locale/orders/:orderId core.controllers.MyClass.myAction4(locale: String)
好吧,那些路線被放置在路線文件中,在過濾器中,我需要檢查天氣,以查看路線是否具有:uuid變量或:orderId以運行其特定的過濾器,因為它們的兩個ID都將它們作為uuid傳遞給我,所以我無法沒想到這個請求,我可以閱讀路線模板嗎?
您可以從RequestHeader#attrs
訪問一些路由信息:
// in your filter
val handlerDef: Option[HandlerDef] = request.attrs.get(Router.Attrs.HandlerDef)
如果要從80個動作中選擇30個來運行某些通用邏輯,則還可以考慮使用“動作生成器”來提供該邏輯。
當您使用Action { ... }
您將獲得香草動作。 您還可以制作自己的MyAction { ... }
,該MyAction { ... }
包裝正常的Action
並運行自定義邏輯。 這是一個ActionBuilder
。 如果您使用這種方法,則只需更新30個操作即可使用該自定義操作構建器。
請參閱: https : //www.playframework.com/documentation/2.6.x/ScalaActionsComposition#Custom-action-builders
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.