如何在 Ktor 中全局提供请求绑定数据



我正在Ktor中构建一个微服务。当我们在应用程序模块中工作时,Ktor 提供对包含授权数据的 call 对象的访问。

我的问题是我需要从服务级别类访问call对象。在 Spring 中,您可以通过访问全球可用的SecurityContext来执行此操作 ThreadLocal .Ktor 是协程驱动的,没有这个选项。

我是否真的需要通过我的服务层方法传递call对象,或者 Ktor 中有没有办法拥有某种可以从任何地方访问的"调用上下文"对象?

我认为目前没有内置的官方机会。

我编写了一个 Ktor-Feature,它实现了这种行为。答案是用几句话来描述它很复杂。

如果您有兴趣,请查看代码 + 示例。还提供了安装指南。

=> https://github.com/MaaxGr/ktor-globalcalldata

<小时 />

这里有一个简短的片段,我的dsl看起来像:

从路由直接或间接调用挂起函数 test((:

routing {
    get("/test") {
        test()
        call.respond("OK")
    }
}

通过callData().call访问调用对象

suspend fun test() {
    val url = callData().call.request.uri
    println(url) // prints "/test"
}

该库还允许添加可绑定到当前协程/调用的自定义属性。

最新更新