Vertx: как проверить аутентификацию перед обработкой тела запроса? - PullRequest
1 голос
/ 17 января 2020

Как проверить аутентификацию перед запросом тела дескриптора?

Я использую 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), это будет работать нормально.

1 Ответ

1 голос
/ 17 января 2020

Это происходит потому, что к тому времени, когда вы аутентифицировали запрос, контент продолжал поступать и был отброшен.

Вам нужно вызвать context.request().pause() в вашем первом обработчике, а затем context.request().resume(), когда вы готов.

В большинстве случаев проще позволить BodyHandler управлять полезной нагрузкой для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...