NoSuchBeanDefinitionException: нет подходящего компонента типа 'org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails - PullRequest
0 голосов
/ 12 сентября 2018

Я борюсь с этой проблемой в течение последних 10 дней и не могу найти помощь в Интернете. Я следую коду, указанному в примере Pivotal SSO, и пример работает нормально, как ожидалось, но когда я копирую код в наш проект, я получаю исключение NoSuchBeanDefinition

2018-09-12T10:39:03.823-05:00 [APP/PROC/WEB/0] [OUT] Caused by: 
org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 
org.springframework.security.oauth2.client.resource.
OAuth2ProtectedResourceDetaiis available: expected at least 1 bean which 
qualifies as autowire candidate. Dependency annotations: {}

А у меня версия зависимостей как ниже

<org.springframework.version>4.3.0.RELEASE</org.springframework.version>
<spring.security.version>5.0.8.RELEASE</spring.security.version>
<spring.ws.version>2.3.0.RELEASE</spring.ws.version>
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.dependencies.version>Finchley.RELEASE</spring-cloud.dependencies.version>
<spring-cloud-services.dependecies.version>2.0.1.RELEASE</spring-cloud-services.dependecies.version>

Вот мой код

import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsAccessTokenProvider;
import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider;
import org.springframework.security.oauth2.client.token.grant.implicit.ImplicitAccessTokenProvider;
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
import org.springframework.security.oauth2.common.OAuth2AccessToken;

@Autowired
private OAuth2RestTemplate oauth2RestTemplate;

@Autowired
private ObjectMapper objectMapper;

@Value("${security.oauth2.client.clientId:placeholder}")
    private String clientId;

    // property set by spring-cloud-sso-connector
    @Value("${ssoServiceUrl:placeholder}")
    private String ssoServiceUrl;

    @PostConstruct
    public void init() {
        oauth2RestTemplate.setAccessTokenProvider(accessTokenProviderChain());
    }   

    @Bean
    public OAuth2RestTemplate oauth2RestTemplate(OAuth2ProtectedResourceDetails oa2prd, OAuth2ClientContext oa2cc) {
        return new OAuth2RestTemplate(oa2prd, oa2cc);
    }

    @Bean
    public AccessTokenProvider accessTokenProviderChain() {
        return new AccessTokenProviderChain(Arrays.<AccessTokenProvider>asList(new OpenIDTokenProvider(),
                new AuthorizationCodeAccessTokenProvider(), new ImplicitAccessTokenProvider(),
                new ResourceOwnerPasswordAccessTokenProvider(), new ClientCredentialsAccessTokenProvider()));
    }

@RequestMapping("/authorization_code")
    public String authCode(Model model, HttpServletRequest request) throws Exception {
        if (ssoServiceUrl.equals("placeholder")) {
            model.addAttribute("header", "Warning: You need to bind to the SSO service.");
            model.addAttribute("warning", "Please bind your app to restore regular functionality");
            return "configure_warning";
        }
        Map<?, ?> userInfoResponse = oauth2RestTemplate.getForObject("{ssoServiceUrl}/userinfo", Map.class,
                ssoServiceUrl);
        model.addAttribute("ssoServiceUrl", ssoServiceUrl);
        model.addAttribute("response", toPrettyJsonString(userInfoResponse));

        OAuth2AccessToken accessToken = oauth2RestTemplate.getOAuth2ClientContext().getAccessToken();
        if (accessToken != null) {
            model.addAttribute("access_token", toPrettyJsonString(parseToken(accessToken.getValue())));
            model.addAttribute("id_token",
                    toPrettyJsonString(parseToken((String) accessToken.getAdditionalInformation().get("id_token"))));
        }
        return "authorization_code";
    }

Любая помощь высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...