我正在 Ktor 中构建微服务。当我们在应用程序模块中工作时,Ktor 提供对call
包含授权数据的对象。
我的问题是我需要访问call
来自服务级别类的对象。在 Spring 中,您可以通过访问SecurityContext
这是全球可用的ThreadLocal
。 Ktor 是协程驱动的,没有这个选项。
我真的需要传承吗call
通过我的服务层方法调用对象,或者 Ktor 中是否有办法拥有某种可以从任何地方访问的“调用上下文”对象?
我认为目前没有内置的官方机会。
我编写了一个 Ktor-Feature 来实现该行为。
答案很复杂,无法用几句话来描述。
如果您有兴趣,请查看代码+示例。还提供安装指南。
=> https://github.com/MaaxGr/ktor-globalcalldata 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"
}
该库还允许添加可以绑定到当前协程/调用的自定义属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)