我正在 Ktor 中构建一个微服务。当我们在应用程序模块中工作时,Ktor 提供对call
包含授权数据的对象的访问。
我的问题是我需要call
从服务级别类访问对象。在 Spring 中,您可以通过访问SecurityContext
全局可用的ThreadLocal
. Ktor 是协程驱动的,没有这个选项。
我真的需要call
通过我的服务层方法传递对象,还是在 Ktor 中有一种方法可以让您可以从任何地方访问某种“调用上下文”对象?
我正在 Ktor 中构建一个微服务。当我们在应用程序模块中工作时,Ktor 提供对call
包含授权数据的对象的访问。
我的问题是我需要call
从服务级别类访问对象。在 Spring 中,您可以通过访问SecurityContext
全局可用的ThreadLocal
. Ktor 是协程驱动的,没有这个选项。
我真的需要call
通过我的服务层方法传递对象,还是在 Ktor 中有一种方法可以让您可以从任何地方访问某种“调用上下文”对象?
我认为目前没有内置的官方机会。
我写了一个 Ktor-Feature,实现了这种行为。答案很复杂,用几句话来形容。
如果您有兴趣,请查看代码 + 示例。还提供了安装指南。
=> https://github.com/MaaxGr/ktor-globalcalldata
从路由直接或间接调用挂起函数 test():
routing {
get("/test") {
test()
call.respond("OK")
}
}
通过访问调用对象callData().call
suspend fun test() {
val url = callData().call.request.uri
println(url) // prints "/test"
}
该库还允许添加可以绑定到当前协程/调用的自定义属性。