Установить контекст сопрограммы из Spring webflux WebFilter

Как установить контекст сопрограммы из Spring WebFlux WebFilter? Является ли это возможным? Я знаю, что могу использовать контекст реактора, но не могу установить контекст сопрограммы.

2 ответа

К сожалению, сейчас это невозможно. В Spring Framework есть открытая проблема, чтобы исправить это, и вы можете проголосовать -> https://github.com/spring-projects/spring-framework/issues/26977 .

      @Component
class AuthorizationFilter : WebFilter {
    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        return chain.filter(exchange).contextWrite { ctx = ctx.put(KEY1, VALUE1) }
}

И: Использование ReactiveSecurityContextHolder внутри Kotlin Flow

ОБНОВИТЬ

Использование и добавление контекста в Kotlin Coroutine.

      val value1 = coroutineContext[ReactiveContext]?.context?.get(KEY1) // VALUE1

//--

withContext(Context.of()) {
     val x = coroutineContext[ReactiveContext]?.context?.get(KEY1) // NoSuchElementException
}

withContext(coroutineContext[ReactiveContext]?.context?.asCoroutineContext()) {
     val x = coroutineContext[ReactiveContext]?.context?.get(KEY1) // Work
}

// Add new key-pair context
val newContext = Context.of(coroutineContext[ReactiveContext]?.context ?: Context.of()).put(KEY2, VALUE2)
withContext(newContext.asCoroutineContext()) {
     val x = coroutineContext[ReactiveContext]?.context?.get(KEY2) // Work
}
Другие вопросы по тегам