gpt4 book ai didi

multithreading - 在多线程上下文中使用 OAuth2RestTemplate

转载 作者:行者123 更新时间:2023-12-04 06:39:58 26 4
gpt4 key购买 nike

我在我的 Spring 启动应用程序中使用 OAuth2RestTemplate 并通过它使用一些资源,因为它封装了所有身份验证信息,所以我可以发送请求,而不用担心 token 和其他身份验证内容。

在我并行发送请求之前,一切正常。

因为 OAuth2RestTemplate 有一个 Session范围(这是本地的,因为它包含用户的 session 相关信息),当我尝试在多线程环境中使用它时,我得到以下异常

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.



据我了解,发生这种情况是因为正在执行代码的这些单独的线程没有与 session 连接。

我现在找到的唯一解决方案是在代码中手动将 session 与新线程绑定(bind),但我不喜欢它。
    RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

Stream.of(1, 2, 3).parallel().forEach(it -> {
RequestContextHolder.setRequestAttributes(requestAttributes);
//do something
RequestContextHolder.resetRequestAttributes();
});

RequestContextHolder.setRequestAttributes(requestAttributes);

有一个 ticket on Spring Jira讨论了类似的问题,但我仍然希望有一些与 OAuth2RestTemplate 相关的解决方案。

所以我想知道是否有人遇到这个以及你是如何解决的。

最佳答案

要使用 session 或请求范围,您需要在 @Configuration 类中将 RequestContextListener 公开为 bean。见 this thread例如。

关于multithreading - 在多线程上下文中使用 OAuth2RestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116045/

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