J'essaye de créer un simple client REST en utilisant Spring Cloud feign pour consommer un service qui est sécurisé avec des jetons de sécurité OAuth2. J'utilise OAuth2FeignRequestInterceptor pour ajouter le jeton de support, vérifiez mon code ci-dessous. Je fais face à 401. et quand essayer de déboguer mon code je ne trouve pas le jeton de support dans mon objet de demande.Nuage de printemps Feign L'intercepteur de requêtes OAuth2 ne fonctionne pas
@Configuration
@EnableConfigurationProperties(value=OAuth2ClientCredentialsProperties.class)
@EnableOAuth2Client
@Profile(OAuth2Profiles.CLIENT_CREDENTIALS)
public class ClientCredentialsConfiguration {
@Autowired
private OAuth2ClientCredentialsProperties oAuth2ClientCredentialsProperties;
@Bean
@Qualifier("ClientCredentialsOAuth2FeignRequestInterceptor")
public OAuth2FeignRequestInterceptor oauth2schemeRequestInterceptor() {
return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), oauth2schemeResourceDetails());
}
@Bean
public ClientCredentialsResourceDetails oauth2schemeResourceDetails() {
ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
details.setClientId(oAuth2ClientCredentialsProperties.getClientId());
details.setClientSecret(oAuth2ClientCredentialsProperties.getClientSecret());
details.setAccessTokenUri(oAuth2ClientCredentialsProperties.getAccessTokenUri());
details.setScope(oAuth2ClientCredentialsProperties.getScopes());
return details;
}
}
Voici mon interface client
@FeignClient(name = "test", url = "http://localhost:8080", configuration = ClientCredentialsConfiguration.class)
interface GitHubClient {
@RequestMapping(value = "/api/v1/products",
produces = "application/json",
consumes = "application/json;charset=UTF-8",
method = RequestMethod.POST)
ResponseEntity<Object> testUsingPOST(@RequestBody TestDTO testDTO);
et mes propriétés sont au-dessous
server.port=10080
security.user.name=admin
security.user.password=admin
security.basic.enabled=false
org.springframework.boot.autoconfigure.EnableAutoConfiguration=sgcib.clips.bcsapi.configuration.ClientCredentialsConfiguration
feign.oauth2.enabled=true
feign.hystrix.enabled=false
Ma principale classe
@SpringBootApplication
@EnableWebMvc
@Controller
@EnableFeignClients
@EnableAutoConfiguration
public class App extends SpringBootServletInitializer {
@Autowired
private GitHubClient gitHub;
@RequestMapping("/")
public String home() {
return "index";
}
@RequestMapping("/{owner}")
@ResponseBody
public ResponseEntity<Object> contributors(@PathVariable String owner) {
return gitHub.productsUsingPOST(new TestDTO());
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
J'ai trouvé le problème, il est dû à l'annotation @Profile (OAuth2Profiles.CLIENT_CREDENTIALS) dans la classe ClientCredentialsConfiguration. J'ai manqué d'activer le profil, donc mon intercepteur Bean n'est pas chargé du tout. –