gpt4 book ai didi

spring-webflux - 如何在spring-webflux中获取当前请求的上下文

转载 作者:行者123 更新时间:2023-12-03 13:36:51 28 4
gpt4 key购买 nike

在经典的spring-mvc中,可以在RequestContextHolder上设置请求范围的属性。在此基础上,我们可以解析一个HandlerInterceptorAdapter中的传入请求,设置请求参数,例如当前登录的用户,唯一的请求ID(用于日志关联)等等。
在请求的生存期内,可以从任何服务(不仅是 Controller )静态检索这些请求属性。

我正在尝试通过spring-webflux实现类似的目标。

我可以使用WebFilter拦截所有传入的请求,获取当前的ServerWebExchange并在其上设置属性。但是,除了 Controller 方法以外,我看不到任何其他方法来获取当前请求的ServerWebExchange

我正在寻找一种更好的解决方案,而不是到处传递ServerWebExchange(或ServerHttpRequest)。

在webflux中,这似乎很难实现,因为我们不能依赖于将与特定请求相关联的变量保存在ThreadLocal上(由于采用非阻塞架构,单个线程可以在进行中的请求之间进行切换)。
尽管如此,这是一个重要的要求。也许有不同的方法?

最佳答案

您描述的方法是当前支持的方法。
正如您所强调的那样,无法对ThreadLocals使用静态方法。

Reactor正在研究具有新上下文功能的替代方法(请参阅this PR)。 Spring可能会选择并使用它,但不一定要用于请求属性,因为当前模型非常合适。

如果您想要特定的扩展点来拦截请求,请在Spring Framework项目上创建一个JIRA issue,描述您要实现的目标以及失败的地方。

关于spring-webflux - 如何在spring-webflux中获取当前请求的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com