vert.x - Vertx:如何在处理正文请求之前验证身份验证?
问题描述
如何在处理正文请求之前验证身份验证?
我正在使用顶点:
vertxVersion = '3.8.3'
implementation "io.vertx:vertx-core:$rootProject.vertxVersion"
implementation "io.vertx:vertx-web:$rootProject.vertxVersion"
implementation "io.vertx:vertx-lang-kotlin:$rootProject.vertxVersion"
implementation "io.vertx:vertx-lang-kotlin-coroutines:$rootProject.vertxVersion"
implementation "io.vertx:vertx-mongo-client:$rootProject.vertxVersion"
implementation "io.vertx:vertx-auth-mongo:$rootProject.vertxVersion"
implementation "io.vertx:vertx-auth-jwt:$rootProject.vertxVersion"
我想在处理正文请求之前验证身份验证。但我得到了错误java.lang.IllegalStateException: Request has already been read
通过使用暂停功能的延迟再现:
router.handler { context ->
launch {
context.request().setExpectMultipart(true)
delay(100) //This line is sample for a verify auth process
context.next()
}
}
.handler {context ->
println("2")
context.request()
.handler {
b -> println("buff ${b.length()}")
}
.endHandler {
println("end handle")
context.success("ok")
}
}.baseHandle(
fn
).failureHandler {
println("fail: ${it.failure()}")
it.error()
}
运行时delay(100)
(这是验证过程的示例),我收到了上面的错误。如果我发表评论delay(100)
,它将正常工作。
解决方案
发生这种情况是因为在您对请求进行身份验证时,内容一直在到达并被丢弃。
您需要context.request().pause()
在您的第一个处理程序中调用,然后context.request().resume()
在您准备好时调用。
在大多数情况下,让管理有效负载更容易BodyHandler
。
推荐阅读
- json - 使用 T-SQL 进行动态 JSON 解析
- android - 自定义 Seekbar 视图类型
- wordpress - Woocommerce rest api 身份验证问题
- oracle - 在 PL/SQL 中连接名字和姓氏的函数
- google-sheets - 在 Google 表格或 Excel 中,如果一列从另一张表格中获取值,我如何将新值放入新的空行中?
- google-apps-script - 使用 Gmail API 获取 Gmail 邮件内容需要哪些范围?
- c++ - 为什么这个 lambda 不能通过引用使用已删除的构造函数来捕获这个变量?
- git - 使用多个 Git 用户 SSH 密钥的权限被拒绝
- macos - 如何在 Outlook 插件中使用 displayDialogAsync(startAddress, options, callback) API 在对话框中显示谷歌页面
- clojure - 需要在 Clojure 中的函数末尾重新分配变量的值