我正在Ktor中构建微服务。当我们在应用程序模块中工作时,Ktor提供对call
对象的访问,该对象包含授权数据。
我的问题是我需要从服务级别的类访问call
对象。在Spring中,您可以通过访问SecurityContext
来访问ThreadLocal
来进行此操作。协程驱动的Ktor没有这种选择。
我真的需要通过服务层方法传递call
对象,还是Ktor中有一种方法可以让您从任何地方访问某种“调用上下文”对象?
答案 0 :(得分:0)
我认为目前没有内置的官方机会。
我写了一个实现该行为的Ktor功能。 答案是很难用几句话来形容。
如果有兴趣,请查看代码+示例。还提供了安装指南。
=> 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"
}
该库还允许添加可以绑定到当前协程/调用的自定义属性。