Я борюсь с этой проблемой в течение последних 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";
}
Любая помощь высоко ценится.