WebFilterChain delegation nested in Mono.defer()
Issue: SPR-15520
This commit is contained in:
parent
47d6e4a332
commit
459457e1aa
|
|
@ -68,14 +68,16 @@ public class DefaultWebFilterChain implements WebFilterChain {
|
|||
|
||||
@Override
|
||||
public Mono<Void> filter(ServerWebExchange exchange) {
|
||||
if (this.index < this.filters.size()) {
|
||||
WebFilter filter = this.filters.get(this.index);
|
||||
WebFilterChain chain = new DefaultWebFilterChain(this, this.index + 1);
|
||||
return filter.filter(exchange, chain);
|
||||
}
|
||||
else {
|
||||
return this.handler.handle(exchange);
|
||||
}
|
||||
return Mono.defer(() -> {
|
||||
if (this.index < this.filters.size()) {
|
||||
WebFilter filter = this.filters.get(this.index);
|
||||
WebFilterChain chain = new DefaultWebFilterChain(this, this.index + 1);
|
||||
return filter.filter(exchange, chain);
|
||||
}
|
||||
else {
|
||||
return this.handler.handle(exchange);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ public class FilteringWebHandlerTests {
|
|||
|
||||
new FilteringWebHandler(targetHandler, Collections.singletonList(filter))
|
||||
.handle(MockServerHttpRequest.get("/").toExchange())
|
||||
.block(Duration.ZERO);
|
||||
.block(Duration.ofSeconds(5));
|
||||
|
||||
assertTrue(filter.invoked());
|
||||
assertTrue(targetHandler.invoked());
|
||||
|
|
@ -170,7 +170,7 @@ public class FilteringWebHandlerTests {
|
|||
}
|
||||
|
||||
private Mono<String> doAsyncWork() {
|
||||
return Mono.just("123");
|
||||
return Mono.delay(Duration.ofMillis(100L)).map(l -> "123");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue