Установить контекст сопрограммы из 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
}