如何配置spring boot配置客户端微服务以从OAE2配置服务器@EnableResourceServer获取其配置?
我有一个OAuth2授权服务器(@EnableAuthorizationServer)。有一个configServer(@EnableConfigServer),我已将其配置为仅响应由包含JWT令牌的授权服务器授权的有效请求。
配置服务器还有一个微服务客户端 APP1 ,需要在启动时从上述配置服务器获取其配置。由于服务器只响应包含有效访问令牌(jwt令牌)的请求,我试图将OAuth2RestTemplate注入ConfigServicePropertySourceLocator,以便我的配置客户端(APP1)可以获取其配置。
为了做到这一点,我尝试了所讨论的部分解决方案here。
这是我想要注入的OAuth2准备好的RestTemplate
@Configuration
public class OAuthConfig {
@Bean
public OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext,
OAuth2ProtectedResourceDetails details) {
return new OAuth2RestTemplate(details, oauth2ClientContext);
}}
这是我的自定义属性定位器
public class CustomConfigServicePropertySourceLocator {
@Autowired
private ConfigurableEnvironment environment;
@Autowired
private RestTemplate restTemplate;
@Bean
public ConfigClientProperties configClientProperties() {
ConfigClientProperties client = new ConfigClientProperties(this.environment);
client.setEnabled(false);
return client;
}
@Bean
@Primary
public ConfigServicePropertySourceLocator configServicePropertySourceLocator() {
ConfigClientProperties clientProperties = configClientProperties();
ConfigServicePropertySourceLocator configServicePropertySourceLocator = new ConfigServicePropertySourceLocator(
clientProperties);
configServicePropertySourceLocator.setRestTemplate(restTemplate);
return configServicePropertySourceLocator;
}}
我按照Customizing the Bootstrap Configuration
中的说明操作我创建了一个META_INF>包含
的spring.factories文件org.springframework.cloud.bootstrap.BootstrapConfiguration = com.company.mcapp.CustomConfigServicePropertySourceLocator
通过调试,我可以看到此自定义定位器将被调用,但我的 APP1 无法联系配置服务器以获取配置。
在PropertySourceBootstrapConfiguration(下面)的初始化方法中,我可以看到propertySourceLocators不包含我的CustomConfigServicePropertySourceLocator。
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
CompositePropertySource composite = new CompositePropertySource(
BOOTSTRAP_PROPERTY_SOURCE_NAME);
AnnotationAwareOrderComparator.sort(this.propertySourceLocators);
boolean empty = true;
ConfigurableEnvironment environment = applicationContext.getEnvironment();
for (PropertySourceLocator locator : this.propertySourceLocators) {
PropertySource<?> source = null;
source = locator.locate(environment);
if (source == null) {
continue;
}
logger.info("Located property source: " + source);
composite.addPropertySource(source);
empty = false;
}
.
.
.
更新:这个问题是我犯的一个愚蠢的错误。我没有创建META-INF,而是创建了META _ INF。