如何使请求绑定的数据在 Ktor 中全局可用?

2024-02-25

我正在 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(使用前将#替换为@)

如何使请求绑定的数据在 Ktor 中全局可用? 的相关文章

随机推荐

  • 批处理文件对多个目录中的所有文件执行命令

    我想制作一个运行此命令的批处理文件 C Program Files x86 IrfanView i view32 exe C Users digi admin TIFFs OLD DIRECTORY tif ini C Users digi
  • Visual Studio:如何中断已处理的异常?

    我希望 Visual Studio 在发生处理的异常时中断 即我不只是想看到 第一次机会 消息 我想调试实际的异常 例如我希望调试器在异常时中断 try System IO File Delete someFilename catch Ex
  • C 中的结构初始化出现错误:预期表达式

    我有一个这样的结构 struct foobar int i char word 我知道这会起作用 struct foobar int i char word struct foobar three 3 three 为什么以下不起作用 str
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • IntelliJ 社区版中的 Spring Boot 项目

    我是 IntelliJ 社区版的新手 任何人都可以帮助我在 IntelliJ 社区版中创建 Spring Boot 项目 对于终极版 有 spring boot 初始化程序 但我找不到社区版的任何内容 我点击了此链接但找不到任何解决方案 使
  • 编辑元素时 Java 优先级队列重新排序

    我正在尝试实现 Dijkstra 算法 以使用优先级队列查找最短路径 在算法的每一步中 我都会从优先级队列中删除距离最短的顶点 然后更新优先级队列中其每个邻居的距离 现在我读到 当您编辑 Java 中的优先级队列中的元素 确定排序的元素 时
  • 如何将变量限制为一组固定的字符串?

    如果我想将数据库中的spicelevel列的值限制为1 2和3 我可以这样做 private enum SpiceLevel Low 1 Medium 2 Hot 3 然后在代码中我可以做 int SpiceLevel Low选择 1 作为
  • Visual Studio 2010 DataCompare 表比较

    在 Visual Studio 2010 中 您是否能够比较两个数据库之间的数据库数据 我想用它来将数据从一个数据库复制到另一个数据库 这些数据库具有完全相同的结构 但是当我进行比较时 我看到 VS2010 的 DataCompare 视图
  • 为什么静态库包含 main 函数?

    我遇到了一个奇怪的静态库 其中包含main 函数 C 我只是想知道它的目的是什么 如何main 执行 从链接器的角度来看 链接在哪里并不重要main功能是 它可以位于静态库中 也可以位于独立的目标文件中 链接器不在乎 它从目标文件生成可执行
  • 如何在 CSS 中定义 tbody 的最小高度

    我想在CSS中设置tbody的最小高度 即使没有 tr td td tr 在 tbody 中 这是我的代码 tbody height 500px min height 500px 但它不起作用 那么我应该怎么做才能实现这一目标呢 你为什么要
  • 沮丧:为什么:“A”是“B”无法访问的基础?

    与此错误消息的其他示例不同 我已经有一个指向A并想要检索实际的子类 这种安排是一些 C 包装的 C 代码的一部分A是一些 POD C 结构 为什么没有动态转换 和test是 C 中的一些回调 它调用 C 功能并检索正确的对象 应使用强制转换
  • 常规语言的抽引理

    我在使用泵引理检查给定语言是否规则时有点困惑 假设我们必须检查是否 L 接受偶数的语言0是否正常 我们知道它是正则的 因为我们可以为 L 构造一个 DFA 但我想用泵引理来证明这一点 现在假设我拿一个字符串w 0000 现在将字符串划分为x
  • 无法使用 Maven 从 .avsc 编译和创建 .avro 文件

    我是 Maven 新手 一直在查看教程和网络以获取有关如何从架构文件 avsc 构建 avro 的文档 基于 apache maven org 站点上的文档 我必须添加以下内容
  • 如何在C# TBB(C#代码片段)中添加用户定义的方法?

    我正在创建一个 C TBB C 代码片段 为此 我需要编写一个用户定义的方法 我尝试使用 如何在代码中访问用户定义的方法 提前致谢 请建议我一种解决此问题的方法 TOM NET API 参考提供了以下示例 log Debug Executi
  • Tensorflow/models 使用 COCO 90 类 ID,尽管 COCO 只有 80 个类别

    Tensorflows object detection 项目的标签图包含 90 个类别 尽管 COCO 只有 80 个类别 因此参数num classes在所有示例配置中设置为 90 如果我现在下载并使用COCO 2017数据集 我需要将
  • bash 中类似 zsh 的历史记录

    我真的很喜欢 zsh 的历史记录自动完成功能 也就是说 当我按下时 我会收到上一个命令 当我打字时emacs然后按向上键 我得到了我使用的最后一个 emacs 命令 当我打字时git然后按向上键 我得到了我使用的最后一个 git 命令 当我
  • alloca 函数崩溃,但 malloc 正常

    请解释一下崩溃的原因 我的第 3 方代码意外崩溃并出现 EXC BAD ACCESS static int overwrite selector struct srm target srm MARFileRemoverProgressBlo
  • 启动 SQLWorkbench/J 时出现“无法加载 Java 运行时环境”

    I get Unable to load Java Runtime Environment开始时SQLWorkbenchJ app https www sql workbench eu 我使用的是 macOS Catalina 10 15
  • 在 React JS 的回调中使用自定义钩子

    我有这个自定义钩子 const useSomething gt const displayAlert text gt alert text return displayAlert 现在我想在我的代码中的某个地方使用它 如下所示 const
  • 如何使请求绑定的数据在 Ktor 中全局可用?

    我正在 Ktor 中构建微服务 当我们在应用程序模块中工作时 Ktor 提供对call包含授权数据的对象 我的问题是我需要访问call来自服务级别类的对象 在 Spring 中 您可以通过访问SecurityContext这是全球可用的Th