【发布时间】:2017-10-14 00:26:29
【问题描述】:
在经典的 spring-mvc 中,可以在 RequestContextHolder 上设置请求范围属性。在此基础上,我们可以解析 HandlerInterceptorAdapter 中的传入请求,设置请求参数,例如当前登录用户、唯一请求 ID(用于日志关联)等。
这些请求属性可以在请求的生命周期内从任何服务(不仅是控制器)静态检索。
我正在尝试使用 spring-webflux 实现类似的功能。
我可以使用WebFilter 来拦截所有传入的请求,获取当前的ServerWebExchange 并为其设置属性。但是,除了控制器方法之外,我看不到任何其他方法可以获取当前请求的 ServerWebExchange。
我正在寻找比到处传递ServerWebExchange(或ServerHttpRequest)更好的解决方案。
这似乎在 webflux 中很难实现,因为我们不能依赖在 ThreadLocal 上保存与特定请求相关的变量(由于非阻塞架构,单个线程可以在请求之间切换)。
尽管如此,这是一个重要的要求。也许有不同的方法?
【问题讨论】:
-
已经快3年了。有这方面的更新吗?
-
@AndrewTFinnell 看到我当时打开的这个问题:github.com/spring-projects/spring-framework/issues/20239。我已停止关注此问题,因为我的团队已从 Spring-webflux 移回 Spring-MVC,但看起来已经取得了一些进展。
-
@DoronGold 你为什么搬回 MVC?
标签: spring-webflux