【发布时间】:2018-03-04 11:41:29
【问题描述】:
我们正在将旧的 Spring 应用程序迁移到 Spring Boot 2.0。
目前我们有一个拦截器,它作为链中的第一个执行并执行以下操作:
- 在
ThreadLocal中设置唯一ID - 在提交响应之前,从本地线程中删除唯一 ID。
我正在尝试找出一种在 Spring WebFlux 中实现这一点的方法。我可以使用WebFilter 实现来做到这一点;然而,由于我使用RouterFunction 作为控制器,我试图检查是否有办法通过HandlerFilterFunction 实现这一点。
public class TxIdFilter implements HandlerFilterFunction<ServerResponse, ServerResponse> {
/**
* {@inheritDoc}
*/
@Override
public Mono<ServerResponse> filter(ServerRequest request, HandlerFunction<ServerResponse> next) {
/*
* How to achieve following (which can be done
* using WebFilter)
*
* exchange.getResponse().beforeCommit(() -> {
* logger.debug("Cleaning up the tx id...");
* AppTransactionContext.removeAll();
* return Mono.empty();
* });
*/
return next.handle(request);
}
}
【问题讨论】:
标签: java spring-boot spring-webflux