gpt4 book ai didi

spring-boot - 如何在计划任务中使用 OAuth2RestTemplate?

转载 作者:行者123 更新时间:2023-12-04 11:49:05 24 4
gpt4 key购买 nike

我有两台资源服务器:一台具有用于发送电子邮件通知的 API,另一台运行计划任务。当计划任务开始时,我想调用电子邮件服务以通知用户他们的任务正在启动。这两种服务都使用 OAuth2 进行身份验证。计划任务服务设置了客户端凭据,以便它可以通过提供其客户端凭据来获取访问 token :
Get token

Call service

为此,我将 Spring Boot 与 Spring Security OAuth2 结合使用。任务服务有一个 OAuth2RestTemplate 来调用电子邮件服务。当计划任务启动并尝试使用 OAuth2RestTemplate 时,它​​会尝试将 OAuth2ClientContext 作为 sesson 范围的 bean。显然,它不会找到一个,因为我不是在请求线程中执行,而是在后台任务线程中操作。我得到这个异常(exception):

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

由于我使用静态客户端凭据进行系统到系统身份验证,因此我认为没有充分理由使用 session 范围的数据来处理我的访问 token 。我更喜欢有一个单例 OAuth2ClientContext bean,任何线程都可以使用它通过 OAuth2RestTemplate 发出请求。

我该如何配置?

最佳答案

结果很简单。我想要一个单例 bean,所以我创建了一个单例 bean:

@Primary
@Bean
public OAuth2ClientContext singletonClientContext() {
return new DefaultOAuth2ClientContext();
}

在我的@Configuration 类中,Spring 将它连接到我的 OAuth2RestTemplate 并且我的计划任务能够调用电子邮件服务。为了更好地衡量,我添加了 @Primary注释以确保此 bean 优于 Spring Boot 创建的任何内容(不确定是否需要)。

关于spring-boot - 如何在计划任务中使用 OAuth2RestTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025379/

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