lex
09/04/2019, 5:24 AMsdeleuze
09/04/2019, 1:47 PMclass FooWebFilter : WebFilter {
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain) = mono(Dispatchers.Unconfined) {
val principal = exchange.awaitPrincipal<Principal>()
println(principal.name)
chain.filter(exchange).awaitFirstOrNull()
}
}
Which seems to me not so bad given the few number of filters required.sdeleuze
09/04/2019, 1:49 PMlex
09/04/2019, 5:24 PMlex
09/04/2019, 5:25 PMDariusz Kuc
09/19/2019, 8:21 PMclass FooWebFilter : WebFilter {
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> = mono {
val context = whatever()
chain.filter(exchange).subscriberContext { it.put("myContextKey", context) }.awaitFirstOrNull()
}
suspend fun whatever(): Foo { ... }
}
Dariusz Kuc
09/19/2019, 11:18 PMoverride fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> = mono {
whatever()
}.flatMap { myContextValue ->
chain.filter(exchange).subscriberContext { it.put("myContextKey", myContextValue) }
}
Dariusz Kuc
09/20/2019, 2:20 PMStepVerifier.create(fooFilter.filter(exchange, chain))
.expectAccessibleContext()
.hasSize(1)
.hasKey(myContextKey)
.assertThat {
val foo = it.getOrDefault<Foo>(myContextKey, null)
assertNotNull(foo)
}
.then()
.verifyComplete()
since step verifier doesn't actually complete the publisher chain until the last step that accessible context is emptyDariusz Kuc
09/20/2019, 3:55 PM