Spring boot Spring cloud假装OAuth2请求侦听器不工作

Spring boot Spring cloud假装OAuth2请求侦听器不工作,spring-boot,spring-security-oauth2,spring-cloud-netflix,spring-cloud-feign,Spring Boot,Spring Security Oauth2,Spring Cloud Netflix,Spring Cloud Feign,我正在尝试使用SpringCloud佯装创建一个简单的REST客户机,以使用OAuth2安全令牌保护的服务。我正在使用OAuth2FeignRequestInterceptor添加承载令牌,请检查下面的代码。我面临401。当尝试调试代码时,我在请求对象中找不到承载令牌 @Configuration @EnableConfigurationProperties(value=OAuth2ClientCredentialsProperties.class) @EnableOAuth2Client @P

我正在尝试使用SpringCloud佯装创建一个简单的REST客户机,以使用OAuth2安全令牌保护的服务。我正在使用OAuth2FeignRequestInterceptor添加承载令牌,请检查下面的代码。我面临401。当尝试调试代码时,我在请求对象中找不到承载令牌

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

}
这是我的客户端界面

@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);
我的主课

@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);
    }
@springboot应用程序
@EnableWebMvc
@控制器
@启用伪装客户端
@启用自动配置
公共类应用程序扩展了SpringBootServletilizer{
@自动连线
私有gitHub客户端gitHub;
@请求映射(“/”)
公共字符串home(){
返回“索引”;
}
@请求映射(“/{owner}”)
@应答器
公共响应属性参与者(@PathVariable字符串所有者){
返回gitHub.productsUsingPOST(newtestdto());
}
公共静态void main(字符串[]args){
SpringApplication.run(App.class,args);
}

我也在使用请求拦截器的外挂。对我来说,将@Bean方法返回类型更改为通用的请求拦截器非常有效。如下所示:

@Bean
public RequestInterceptor oauth2FeignRequestInterceptor() {
    return new OAuth2FeignRequestInterceptor(...);
}
本教程还很好地描述了如何使用feign设置OAuth:

我发现了问题,这是由于ClientCredentialsConfiguration类中的注释@Profile(OAuth2Profiles.CLIENT\u凭据)造成的。我没有启用该概要文件,因此我的侦听器Bean根本没有加载。

我发现了问题,这是由于注释@Profile(OAuth2Profiles.CLIENT\u凭据)造成的在ClientCredentialConfiguration类中。我没有启用配置文件,因此我的拦截器Bean根本没有加载。感谢您的回答。使用您链接的解决方案,它对我有效。但是我想使用Spring Security 5,因为Spring Security OAuth已被弃用->。因此我不想使用它启动新项目。
@Bean
public RequestInterceptor oauth2FeignRequestInterceptor() {
    return new OAuth2FeignRequestInterceptor(...);
}