3

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

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

我真的需要call通过我的服务层方法传递对象,还是在 Ktor 中有一种方法可以让您可以从任何地方访问某种“调用上下文”对象?

4

1 回答 1

0

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

我写了一个 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"
}

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

于 2020-12-17T18:10:58.087 回答