当前位置: 首页 > 知识库问答 >
问题:

Vertx:如何在处理正文请求之前验证身份验证?

艾子石
2023-03-14

如何在处理正文请求之前验证身份验证?

我正在使用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:请求已被读取

使用暂停功能上的延迟复制:

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)时(这是验证过程的示例),我得到了上面的错误。如果我对延迟(100)进行注释,它可以正常工作。

共有2个答案

赫连骏
2023-03-14

最后,我确实解决了。

我的路由器正在处理流:

router.post("/api/upload/file")
      .baseHandle { checkAuthorization(it) }
      .handleFileUpload { updateFileOnItem(it) }

和以下步骤:

fun checkAuthorization(context: RoutingContext) {
    val request = context.request()
    val tkCookie = request.getCookie("user")
    ...do something to verify user permission
    request.pause()
    context.next()
    context.request().resume()
}

下一步:

fun updateFileOnItem(context: RoutingContext) {
    val file = context.fileUploads()
    ...do something
}

它和我一起工作。希望能对你有所帮助。谢谢

农永宁
2023-03-14

发生这种情况是因为当您对请求进行身份验证时,内容已经不断到达并已被删除。

您需要在第一个处理程序中调用context.request()。暂停(),然后在准备好后调用context.request()。恢复()

但在大多数情况下,让BodyHandler为您管理负载更容易。

 类似资料:
  • 问题内容: 未验证用户身份时如何处理ajax请求? 有人进入页面,留出一个小时的空间,返回,然后使用jQuery()在通过ajax的页面上添加评论。由于未通过身份验证,因此方法返回RedirectToRoute结果(重定向到登录页面)。你用它做什么?您如何在客户端处理它,以及如何在控制器中处理它? 问题答案: 编辑: 我很久以前就写了以上答案,现在我认为发送403不是正确的方法。403的含义略有不

  • 我正在使用Vert。后端为x,前端为AngularJS。 Vert. x服务器使用POST和GET方法接收HTTP操作。不知何故,我为每个请求获取不同的会话ID。 以下是来自我的LoginFormHandler类句柄例程的代码片段。 我正在将用户对象放入当前会话中。然后我移动到新页面并向Vert. x服务器发送POST请求。在那个POST处理程序中,我正在尝试获取会话对象: 我没有得到用户。此外,

  • 我试图得到一个API查询到python。命令行 给出一些json输出。myToken是一个十六进制变量,始终保持不变。我想从python中调用它,这样我就可以循环使用不同的ID并分析输出。有什么想法吗?在需要身份验证之前,我已经使用urllib2完成了这项工作。我还查看了requests模块,但不知道如何实现。 非常感谢。

  • 但是这个配置的问题是我只能以用户Euclid的身份登录。但我想作为每一个可用的用户登录。 但是对于另一个配置,我会在日志中得到这样的消息,即找到了该用户,但已经发生了驱逐。 2017-04-20 09:36:16]ldap_driver.debug:ldap_search(dc=example,dc=com,(&(&(objectclass=person))(UID=einstein)),[arr

  • 问题内容: 尝试进行某些路由需要身份验证。 我有这个: 注意:是的,身份验证服务可以正常工作。 对于每条路由,我都会检查用户是否已通过身份验证,如果没有通过身份验证,则要将他们重定向到登录页面,如果已通过身份验证,则它将以“ /”路由登陆到第一页。 我得到的是: 我在哪里做错了? 问题答案: 一个简单的解决方案是制作一个包含所有受保护路线的(高阶组件)。 根据您的应用程序的嵌套方式,您可能需要利用

  • 问题内容: 问题: 如何向OkHTTP添加授权代理。 我知道OkHTTP的生成器确实支持代理,尽管我很难设置一个代理。 我有IP /端口/用户名/密码。 尽管我不知道如何将其转换为client.SetProxy()中可以使用的那些。 这似乎过于复杂,我似乎无法弄清楚。任何帮助,将不胜感激。 问题答案: 试试这个: