spring-cloud - oauth2ClientContext 没有被注入(inject)

标签 spring-cloud spring-security-oauth2 spring-oauth2

应用程序没有启动,因为有两个候选 bean。启动应用程序时出现以下错误。

***************************
 APPLICATION FAILED TO START
***************************
Description:

Parameter 0 of method oauth2RestTemplate in com.classpath.assetservice.AssetServiceApplication required a bean of type 'org.springframework.security.oauth2.client.OAuth2ClientContext' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

The following candidates were found but could not be injected:
    - Bean method 'oauth2ClientContext' in 'OAuth2RestOperationsConfiguration.RequestScopedConfiguration' not loaded because OAuth Client ID did not find security.oauth2.client.client-id property
    - Bean method 'oauth2ClientContext' in 'OAuth2RestOperationsConfiguration.SingletonScopedConfiguration' not loaded because AnyNestedCondition 0 matched 2 did not; NestedCondition on OAuth2RestOperationsConfiguration.ClientCredentialsCondition.NoWebApplication @ConditionalOnWebApplication found 'session' scope and did not find reactive web application classes; NestedCondition on OAuth2RestOperationsConfiguration.ClientCredentialsCondition.ClientCredentialsConfigured @ConditionalOnProperty (security.oauth2.client.grant-type=client_credentials) did not find property 'grant-type'


Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.security.oauth2.client.OAuth2ClientContext' in your configuration.


Process finished with exit code 1

以下是我的Controller类(class)
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.oauth2.client.OAuth2ClientContext;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import java.util.Collections;
import java.util.List;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
@EnableResourceServer
public class AssetServiceApplication {

    @Bean
    public OAuth2RestTemplate oauth2RestTemplate(
            OAuth2ClientContext oauth2ClientContext,
            OAuth2ProtectedResourceDetails details) {
        return new OAuth2RestTemplate(details, oauth2ClientContext);
    }

    public static void main(String[] args) {
        SpringApplication.run(AssetServiceApplication.class, args);
    }

下面是对应的依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-security</artifactId>
</dependency>

我哪里错了。

最佳答案

通过在 application.yml 文件中添加以下属性修复了此问题

security:
  oauth2:
    resource:
      userInfoUri: http://localhost:8901/auth/user
    client: # This property (client.grant-type)
      grant-type: client_credentials

关于spring-cloud - oauth2ClientContext 没有被注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58839637/

相关文章:

java - 包含 Eureka 时, Autowiring RestTemplate 会导致 "argument type mismatch"

Zuul 上的 Spring Security 预授权过滤器建立和共享 session

java - 没有 client_secret 的 Spring Security OAuth 2.0

spring - hasRole 总是返回 403

java - Spring Oauth2 注册重定向 URI

java - 使用 spring security 和 oauth2 刷新 token 调用失败,错误为 : UserDetailsService is required

spring-cloud - 在 Spring Cloud 中保护 Eureka

java - 假装REST客户端: FactoryBean threw exception on object creation

java - Spring Security OAuth2 从默认过滤器链中禁用 BasicAuthenticationFilter

spring-boot - 我可以在 oauth/check_token 端点中附加一些信息并在授权服务器上检索它吗?