如何为spring boot config client

时间:2017-11-16 23:16:40

标签: java spring-boot spring-security spring-oauth2

如何配置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。

0 个答案:

没有答案