spring - NoSuchBeanDefinitionException:没有 'org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails 类型的合格 bean
问题描述
在过去的 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";
}
非常感谢任何帮助。
解决方案
推荐阅读
- case - 在 Sybase 中将文本格式更改为驼峰式大小写
- neo4j - 在 neo4j 中运行查询以形成关系
- tensorflow - 迁移学习 tersoflow
- javascript - JavaScript forEach 语法和长度
- c# - 如何使用 Google.OrTools.Graph 显示 MinCostMaxFlow 的最佳路径 - C#
- android - Fresco 从 sdcard 加载图像
- python - 如何将 wxPython 3 安装到我的 Conda Python 2 中?
- python - 我只想使用 python 的椭圆包络检测异常值,那怎么办?
- python - 无法使用 Python 加载 iframe 的内容
- php - 如何从文件中删除包含特定字符 (#) 的行并使用 PHP 回显数据