Получите аутентифицированное имя пользователя как Spring в приложении Spring Flux - PullRequest
0 голосов
/ 13 февраля 2020

В настоящее время я новичок в kotlin и весеннем потоке.

Я пытаюсь получить зарегистрированного пользователя в виде строки без необходимости немедленного возврата объекта Mono.

В настоящее время у меня есть обработчик, который отображает запрос на объект DTO. как следующий

fun redeemLeave(req: ServerRequest): Mono<ServerResponse> =
    req.bodyToMono<RedeemLeaveDTO>().map { issuance ->
        val errors = validator.validate(issuance)
        if (errors.isNotEmpty()) {
            issuance.fieldErrors = errors.map {
                FieldErrorDTO(it.propertyPath.toString(), it.message)
            }
        }
        issuance
    }.flatMap {
        when (it.fieldErrors) {
            null -> employeeComposer.redeemLeave(it)
            else -> ServerResponse.unprocessableEntity().body(Mono.just(it))
        }
    }

У меня есть другая конечная точка, где я могу получить имя пользователя, но нет отображения dto, поэтому оно работает хорошо.

fun requestBalance(req: ServerRequest): Mono<ServerResponse> =
    req.principal()
        .map(Principal::getName).flatMap { username ->
            employeeComposer.requestBalance(username)
        }

Как получить имя пользователя из вызова Principal ()? Есть ли способ лучше? Я хотел бы иметь возможность получить имя пользователя для первого метода, а также иметь преобразование dto.

...