小编rei*_*rok的帖子

代表多个用户使用OAuth2RestTemplate

我正在创建一个系统,它定期将代表许多用户的数据导出到外部系统,并使用OAuth2验证的HTTP请求.

我已经成功地使用Spring Security OAuth2与外部服务进行通信,OAuth2RestTemplate配置如下:

@Configuration
@EnableOAuth2Client
public class ExternalServiceConfiguration {

    @Autowired
    private OAuth2ClientContext oauth2Context;

    @Bean
    public OAuth2ProtectedResourceDetails credentials() {

        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
        details.setAccessTokenUri("https://external-service.example.com/OAuth/Token");
        details.setClientId("abcdefghijklmnopq");
        details.setClientSecret("123456789123456789123456789");
        details.setGrantType("client_credentials");

        return details;
    }

    @Bean
    public OAuth2RestTemplate externalServiceRestTemplate() {
        return new OAuth2RestTemplate(credentials(), oauth2Context);
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,我可以将OAuth2RestTemplate bean注入我的服务:

@Autowired
@Qualifier("externalServiceRestTemplate")
private OAuth2RestTemplate restTemplate;
Run Code Online (Sandbox Code Playgroud)

但是,在我的应用程序中,我有许多用户需要配置自己的客户端密钥.如果它是相关的,我这是一个批处理作业,这意味着它是在常规HTTP请求之外完成的,有时在同一个线程上下文中完成.

这意味着我需要有多个OAuth2ProtectedResourceDetails,并且我假设还有多个OAuth2RestTemplate实例.由于这是每个用户将自己配置的内容,因此必须根据保存在数据库中的客户端凭据动态发生.

有没有人对如何以高效但线程安全的方式配置动态数量的OAuth2RestTemplate实例有任何建议?

java spring resttemplate spring-security-oauth2

7
推荐指数
1
解决办法
1512
查看次数