0

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); 
    } 

Répondre

0

Je trouve la question, il est dû à l'annotation @Profile (OAuth2Profiles.CLIENT_CREDENTIALS) dans le ClientCredentialsConfiguration classe. J'ai manqué d'activer le profil, donc mon intercepteur Bean n'est pas chargé du tout.

0

J'utilise aussi feindre avec des intercepteurs de demande. Pour moi, cela a fonctionné pour changer le type de retour de la méthode @Bean en un RequestInterceptor générique. Comme ceci:

@Bean 
public RequestInterceptor oauth2FeignRequestInterceptor() { 
    return new OAuth2FeignRequestInterceptor(...); 
} 

également ce tutoriel décrit assez bien comment OAuth configuration avec feindre: spring-cloud-feign-oauth2

+0

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. –