You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Dynamics CRM API:添加额外令牌请求资源配置方法

在Spring Boot中配置CRM API的令牌请求(含resource参数)

方式一:手动构建令牌请求(RestTemplate)

如果不需要依赖Spring Security的OAuth2自动配置,可以直接用RestTemplate发送POST请求获取令牌,手动传入所需的键值对参数:

  1. 配置RestTemplate Bean(项目未配置时添加):
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  1. 编写令牌获取方法,在请求体中包含resource及其他必填参数:
@Service
public class CrmTokenService {
    private final RestTemplate restTemplate;

    @Value("${crm.token.url}")
    private String tokenUrl;
    @Value("${crm.client.id}")
    private String clientId;
    @Value("${crm.client.secret}")
    private String clientSecret;
    @Value("${crm.resource}")
    private String resource; // 对应xyz-dynamics.com

    public CrmToken getToken() {
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("grant_type", "client_credentials");
        params.add("client_id", clientId);
        params.add("client_secret", clientSecret);
        params.add("resource", resource);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
        ResponseEntity<CrmToken> response = restTemplate.postForEntity(tokenUrl, request, CrmToken.class);
        
        return response.getBody();
    }

    // 令牌响应实体类
    public static class CrmToken {
        private String access_token;
        private String token_type;
        private long expires_in;

        // getter、setter方法省略
    }
}
  1. 在application.properties中配置参数:
crm.token.url=https://your-crm-token-endpoint.com/oauth2/token
crm.client.id=your-client-id
crm.client.secret=your-client-secret
crm.resource=xyz-dynamics.com

方式二:使用Spring Security OAuth2 Client自动配置

如果项目已集成Spring Security OAuth2,可通过配置ClientCredentialsResourceDetails自动处理令牌请求:

  1. 添加Spring Security OAuth2依赖(Maven示例):
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.5.2.RELEASE</version>
</dependency>
  1. 配置OAuth2客户端详情:
@Configuration
@EnableOAuth2Client
public class OAuth2Config {
    @Value("${crm.token.url}")
    private String tokenUrl;
    @Value("${crm.client.id}")
    private String clientId;
    @Value("${crm.client.secret}")
    private String clientSecret;
    @Value("${crm.resource}")
    private String resource;

    @Bean
    public ClientCredentialsResourceDetails crmResourceDetails() {
        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
        details.setAccessTokenUri(tokenUrl);
        details.setClientId(clientId);
        details.setClientSecret(clientSecret);
        // 将resource参数添加到请求体
        details.setAdditionalParameters(Map.of("resource", resource));
        return details;
    }

    @Bean
    public OAuth2RestTemplate crmRestTemplate(OAuth2ClientContext oauth2ClientContext) {
        return new OAuth2RestTemplate(crmResourceDetails(), oauth2ClientContext);
    }
}

配置完成后,直接使用crmRestTemplate发送CRM API请求即可,它会自动获取并携带令牌。

注意事项

  • 确认令牌端点支持application/x-www-form-urlencoded格式的请求体,这是OAuth2客户端凭证模式的标准格式。
  • 可根据实际令牌响应结构调整CrmToken实体类的字段。
  • 建议添加令牌缓存逻辑,减少对令牌端点的重复请求。

内容的提问来源于stack exchange,提问作者Ashrin Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:10:16