如何在ktor中创建可重用的拦截器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ktor中创建可重用的拦截器?相关的知识,希望对你有一定的参考价值。

在ktor中,似乎通过拦截器进行自定义权限检查的方式如下:

route("/portal") {
   route("articles") { … }
   route("admin") {


    intercept(ApplicationCallPipeline.Features) { … } // verify admin privileges
      route("article/{id}") { … } // manage article with {id}
      route("profile/{id}") { … } // manage profile with {id}
   }
}

提取拦截器逻辑以便在代码库中的其他位置重用其他路由的最佳方法是什么?

答案

抱歉迟到了。在我的代码中,我创建了路由,一些路由有一个拦截器来测量和记录执行的时间,而其他路由没有。所以我按照文档中的例子(https://ktor.io/advanced/pipeline/route.html#)创建了一个函数,然后我只有一个需要测量的路径块。

请在下面找到我的代码

install(Routing) {
    val konfig = HoconKonfigAdapter()
    val contextPath = konfig.get("ktor.deployment.context-path")
    route("$contextPath/api/v1") {
        val registry = feature(Metrics).registry

        healthEndPoints()
        metricsEndPoints(registry)
        routeWithMeasureTime {
            catalogSiEndPoints()
            reunionCatalogEditoEndPoints()
            telesurveillanceCatalogEditoEndPoints()
            catalogLegacyEndPoints()
        }
    }
}

阻止routeWithMeasureTime内的所有路径将被截获并测量。另一个,没有。

希望它能帮助事件这么晚。

以上是关于如何在ktor中创建可重用的拦截器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应钩子中创建可重用状态?

如何在JSF中创建可重用的组件?

在 Swift 中创建可重用视图并添加完成处理程序

在Vue中创建可重用的 Transition

在 Google AdWords 中创建可重用函数

如何在颤动中创建可滚动的行