Мы имеем следующую конфигурацию клиента для наших клиентов oauth2 в месте, которое работает достаточно хорошо с пружинным ботинке 1.4.0:Настройка Spring OAuth2 Client для client_credentials потока
@Configuration
@ConfigurationProperties(prefix = "pmc.oauth.client")
public class OAuthClientConfig {
@NotNull
private String scope;
@NotNull
private String clientSecret;
@NotNull
private String clientId;
@NotNull
private String accessTokenUri;
private int clientReadTimeout = 60000;
private int clientConnectTimeout = 60000;
@Bean
public OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setAccessTokenUri(accessTokenUri);
resourceDetails.setClientId(clientId);
resourceDetails.setClientSecret(clientSecret);
resourceDetails.setScope(Collections.singletonList(scope));
return resourceDetails;
}
@Bean
public OAuth2ClientContext oauth2ClientContext() {
DefaultOAuth2ClientContext defaultOAuth2ClientContext = new DefaultOAuth2ClientContext();
return defaultOAuth2ClientContext;
}
@Bean
public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails, OAuth2ClientContext oauth2ClientContext) {
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(oAuth2ProtectedResourceDetails, oauth2ClientContext);
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
restTemplate.setRequestFactory(factory);
return restTemplate;
}
}
После обновления Spring-Boot 1.4.1 I «Было замечено, что при автоподготовке OAuth2RestTemplate другая реализация OAuth2ProtectedResourceDetails имеет приоритет (из-за org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ProtectedResourceDetailsConfiguration - автоконфигурация, которая помечает bean of AuthorizationCodeResourceDetails как первичный) по нашему собственному определенному компоненту тип ClientCredentialsResourceDetails.
Я знаю, что могу исправить это, не автоувеличивая resourceDetails и clientContext для остальных фасонных компонентов и напрямую поставляя конкретные реализации, но мне просто интересно, настраиваем ли мы наш шаблон отдыха таким образом, который не был рассчитан весной команда?
Любые мысли о том, как правильно настроить наш шаблон отдыха для потока client_credentials?
Cheers, Бен
Также представляется действительным решением. Я пошел, вы могли сказать грязный путь, и теперь я не могу использовать autwiring не по типу интерфейса (OAuth2ProtectedResourceDetails), а по конкретной его реализации (ClientCredentialsResourceDetails), так как это фактическая реализация, в которой я заинтересован. Возможно, я исключал возможность OAuth2ProtectedResourceDetailsConfiguration выбранный механизмом автоконфигурации следующим образом: @EnableAutoConfiguration (exclude = OAuth2ProtectedResourceDetailsConfiguration .class). Мне все же любопытно, как это сделать, «правильный». – jimonthebarn